Docker容器技术

  docker提供轻量的虚拟化,通过docker镜像能创建出多个容器,一个容器相当于一个虚拟机。可以把镜像快速部署到无数台服务器上。

面对多种复杂的开发环境,docker能很好的解决企业不同的项目的不同开发环境,使开发运维一体化,环境互不干扰,提高工作效率。

  

Docker与虚拟机对比:

  虚拟机:资源全部隔离,cpu、内存、磁盘相互独立,一台宿主机中可以安装的虚拟机数量是一定的,有限的,移植性不强(文件很大,拷贝传输困难)。

  Docker:部分共享部分隔离,共享cpu,内存,磁盘甚至操作系统,极为轻量

Docker五大要素: 

  1. 沙箱:隔离,将应用之间的必要资源隔离开,防止互相影响,应用之间互相独立。
  2. 镜像:模板,使用dockerfile制作镜像,通过镜像创建容器。
  3. 容器:镜像的实例,镜像只读,容器可写,容器中可以保存应用产生的零时文件 
  4. 数据卷:挂载到容器上,用于保存必要数据。比如容器中数据库的数据,但是不建议用,因为重启容器需要挂载同步数据,效率较慢,解决方式:数据库拆分
  5. 仓库:与maven仓库概念一致,应用都会保存在仓库中,创建容器是根据镜像的规定进行拉取,可以共享。
  6. https://www.cnblogs.com/wushuaishuai/p/9984228.html

 Docker对Linux的版本要求:

  docker基于Linux3.8及以上版本64bit内核开发,所以在使用docker前需要确认Linux内核版本

  一般要centos7以上(查看命令:uname  -a)

二、下面我们正式进入docker容器技术的使用,这里会介绍Redis容器,MySQL容器,Tomcat容器

1.1安装内核版本高于centos7的虚拟机

1.2修改静态IP:(参考命令)vim /etc/sysconfig/network-scripts/ifcfg-ens33

  在物理机中找到对应的虚拟机网络映射IP,然后按“i”修改ipaddr,gateway,dns1前三个网段与物理机查到的一致

  

esc进入命令模式,:wq退出

1.2.1重启网络服务,让IP地址生效,命令为:service network restart

  使用xshell连接虚拟机,Ctrl+C退出

1.2.2 注意防火请要关闭

  systemctl stop firewalld.service   关闭防火墙

  systemctl disable firewalld.service   禁止防火墙开机自动启动

  firewall-cmd   --state   查看防火墙状态

1.3 安装docker:略(和安装其他软件一样)

1.3.1 验证docker是否安装成功命令: docker version

1.3.2 启动docker 

  systemctl status docker     service docker restart      查看docker状态/重启docker

  systemctl start docker     service docker stop      启动docker /停止docker     

1.4 在做第一个Redis案例之前先了解一些docker命令

  docker load -i xxxx.tar     (指定jar包导入镜像文件/加载镜像)

  docker rm  镜像名   (根据镜像名删除镜像)

  docker images    (查询所有镜像文件)

       docker tag  旧镜像名和端口   redis-ali:0.0.1  (修改镜像名称)

  docker run -d --name 容器名 镜像名:版本号  ( 根据镜像名称启动容器)

  docker ps -a     (查看全部的容器)

1.5 Redis案例

  这里我是在/usr/local/src目录下新建了redis文件夹,然后用FileZilla把我的Redis镜像(redis-3.2.8.tar

)拷入虚拟机

  执行cd /usr/local/src/redis  和  docker load -i redis-3.2.8.tar  (加载redis镜像)     docker images(查看镜像)

1.5.1 创建容器:

  docker run -d --name redis7000 -p 7000:6379   redis:3.2.8   (创建,启动容器,并指定暴露端口)

  容器名(redis7000)  虚拟机端口(7000)  镜像端口(6379)  镜像名/版本号 (redis/3.2.8)

  访问过程如下图:

 

 

 1.5.2 命令:docker ps -a   查看容器

1.6  测试点个容器

创建maven quick start项目,项目名redis

pom.xml中把junit版本改成4.12,添加jedis依赖

<!-- jedis -->

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.6.2</version>

</dependency>

 1.6.1 创建测试类 JedisTest

 

1.6.2  查看数据是否成功存入redis7000 容器中,进入到容器执行以下命令

   

  如上图,则数据成功存入redis7000容器。

1.6.3  创建多个redis容器:思路图

  

docker run -d --name redis7001 -p 7001:6379 redis:3.2.8

docker run -d --name redis7002 -p 7002:6379 redis:3.2.8

执行查看容器命令:docker ps -a    (可以看到3个redis容器就创建好了,能理解思路图很重要)

 

 测试的话,参考一个redis容器测试方法。

附加:

docker start redis7000    docker stop redis7000     docker rm redis7000(开始/停止/删除容器,删除必须先停止)

可以用docker stats -a 命令查看docker容器消耗的CPU,你会发现性能超级好   退出 Ctrl+C

然后就是docker容器有以下优点或者说特性吧,后面会做解释

 2.创建网络

  创建Tomcat容器和MySQL容器,使我们的外部浏览器能访问到数据

2.1 执行  docker network create --subnet=172.18.0.0/24 dockernet  创建网络,执行 ifconfg发现多一个新的网络

  

2.2  把我们的MySQL镜像上传到 服务器/usr/local/src中    (我的MySQL镜像名:mysql-image.tar)

  加载MySQL镜像,命令为:docker load -i mysql-image.tar

  查看镜像 (下图)命令:docker images,如果红色框那里是<none>我们就要为镜像起仓库地址名字和设置版本号

  命令为:docker  tag  IMAGE ID(镜像唯一ID,根据自己的写)   docker.io/(REPOSITORY_name):(版本号)

  

2.2.1 MySQL镜像已经加载好了,接下来根据镜像创建容器 

//启动mysql docker容器,设置root密码,设置默认编码,指定端口映射:命令为

docker   run  --net dockernet --ip 172.18.0.11  --name=mysql-container   -it  -d   -p 3306:3306  -e MYSQL_ROOT_PASSWORD=root    mysql:5.7   --character-set-server=utf8

 注意这个172.18.0.11这是我们一开始创建的那个新的网络,前三个网段一致,最后一位0~255自己分配

此时执行 docker ps -a 就可以查看我们的MySQL容器了

附录(查看MySQL的IP命令:docker inspect mysql-container)

2.2.2  导入数据库 建议用数据库可视化工具,主机名填我们的虚拟机IP,然后导入项目的XXX.sql数据文件

3 Tomcat容器

  把Tomcat镜像上传至/usr/local/src    执行加载镜像命令

  docker load -i Tomcat镜像名      (我的是tomcat7-image.tar)   查看镜像docker images

  如若REPOSITORY  和 TAG栏显示<none>则执行:

  docker tag 510e45f8f9f7 docker.io/tomcat:7.0   (这个命令上面,安装MySQL时候提到过)

3.1  创建Tomcat容器:  docker run -d -p 8080:8080 --net dockernet --ip 172.18.0.12 --name xiangmu-tomcat  tomcat:7.0

      (不多解释了,看不懂就自己想办法吧)

3.2  到这里我们就算完成项目的环境搭建了,此时浏览器输入http://虚拟机IP:8080就可以访问到Tomcat首页了

  然后把我们项目的jdbc驱动链接IP改为我们的虚拟机IP,重新打war包,把打好的war包改为ROOT.war上传到

  /usr/local/src文件夹中,然后拷贝到容器Tomcat的webapps中,命令为:

  docker cp  ROOT.war xiangmu-tomcat:/usr/local/tomcat/webapps/

  浏览器访问http://虚拟机IP:8080/       (这个8080是3.1那行红色那个8080)

  这样我们就能看到项目首页了

附录:我们的root.war会自动解压,如果没自动解压重启Tomcat容器4

三: Dockerfile制作镜像  很重要,很核心

  

 

我们制作好一个完整的开发环境,上面第二大步就完成了一个完整的开发环境

由于用到脚本语言,建议防着写,我也不懂脚本语言 ,docker images可以看到我的虚拟机已经装好一个操作系统镜像

把jdk和Tomcat上传到/usr/local/src中  (jdk-8u51-linux-x64.tar.gz     apache-tomcat-7.0.55.tar.g)到官网自己下载Linux系统版本的

用开发工具IDE创建一个名为oa的maven webapp项目(项目名你随便起也行,测试用)->maven install ->在target文件夹中找到oa.war

拷贝到\usr\local\src   

3.1  在物理机创建Dockerfile文件,内容如下

#添加contos6.5 image

FROM a2a69ca5184a 

#添加JDK1.8  centos+jdk

ADD jdk-8u51-linux-x64.tar.gz /usr/local/src

ENV JAVA_HOME=/usr/local/src/jdk1.8.0_51

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#centOS6.5+JDK1.8+tomcat7

ADD apache-tomcat-7.0.55.tar.gz /usr/local/src

ENV CATALINA_HOME /usr/local/src/apache-tomcat-7.0.55

ENV PATH=$PATH:$CATALINA_HOME/bin

#添加oa.war包文件

WORKDIR $CATALINA_HOME/webapps

RUN mkdir  oa

COPY oa.war $CATALINA_HOME/webapps/oa/oa.war

WORKDIR $CATALINA_HOME/webapps/oa

RUN jar xvf oa.war

RUN rm oa.war

#对外暴露的端口号

EXPOSE 8080

CMD ["/usr/local/src/apache-tomcat-7.0.55/bin/catalina.sh","run"]

 (这一串自己研究哈,有注释)

3.2. 制作新的镜像文件,镜像名称为oa-tomcat版本号0.01

cd /usr/local/src      

docker build -t oa-tomcat:0.0.1 -f Dockerfile ./   (./代表当前目录)

制作成功会显示“Successfully tagged oa-tomcat:0.0.1”(耐心等待)

制作好命令 docker images 查看镜像

3.3 用自己制作的镜像创建容器

docker run -d -p 9080:8080 --net dockernet --ip 172.18.0.13 --name oa-tomcat  oa-tomcat:0.0.1

http://虚拟机IP:9080/oa     看到hello Word!就成功了

3.3.1 这里我们是做了个包含操作系统的容器,查看

docker exec -it  oa-tomcat  bash可以用这个命令查看容器内容文件结构  退出命令,exit

 

,生成镜像文件,在三中,已经做好了一个完整的开发环境,现在把环境打包成镜像

 

命令:先查看存在的镜像docker images 在执行生成镜像文件命令

docker save -o oa-tomcat-0.0.1.tar oa-tomcat:0.0.1

这样就成功了

五:自己如果能尝试用我们这个oa-tomcat-0.0.1.tar镜像重新安装Tomcat容器并访问测试项目oa.war就学会docker容器了

总结:一定要想明白,服务器(1台或者多台)、访问端口号、镜像、容器、之间的关系是关键。

  Docker容器一般用于部署重复相同的服务,如:redis集群,tomcat集群等。适用于快速高效集群扩展。整个过程全自动,省去了运维成本。

有多台服务器装同样的环境,使用docker优点是装的速度快,环境一致

在一台服务器用docker装出redis容器,nginx容器,mysql容器,tomcat容器,优点是可限制每个容器使用的cpu,内存,磁盘,

不用docker,在一台服务器上装nginx,redis,mysql,tomcat,有一个服务出问题,别的服务也会出问题。小的项目不用docker

 

posted @ 2019-03-15 00:11  峡谷迅捷蟹  阅读(296)  评论(0)    收藏  举报

Pick with me