本文主要介绍Docker数据管理和网络通信的使用。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
Docker可以简单的通过Dokcer核心和安装进行安装和 *** 作。
一、Docker图像的创建方法
Docker映像不仅是Docker的核心技术,也是应用发布的标准格式。一个完整的Docker映像可以支持-Docker容器的 *** 作。在Docker的整个使用过程中,进入-一个定型的容器后,就可以在容器中 *** 作了。最常见的 *** 作是在容器中安装应用服务。如果您想要迁移已安装的服务,您需要生成环境和已构建服务的新映像。
(1)基于现有镜像创建
dockercommit命令主要用于基于现有图像创建图像。其本质是将运行在容器中的程序和程序的运行环境打包生成一个新的映像。
命令格式如下:
码头提交[选项]集装箱ID/名称仓库名称:[标签]
参数如下:
(1)先安装Docker,然后创建镜像。
[root@localhost~]#yum-yinstalldocker [root@localhost~]#systemctlstartdocker [root@localhost~]#mount/dev/cdrom/media/ mount:/dev/sr0写保护,将以只读方式挂载 [root@localhost~]#cd/media/ [root@localhostmedia]#ls apache-tomcat-8.5.16.tar.gzdhcpjdk-8u91-linux-x64.tar.gz centoshttpdregistry.tar.gz centos6httpd_centosubuntu-12.04-x86_64-minimal.tar.gz [root@localhostmedia]#dockerload<dhcp\\zair载入镜像到本地 [root@localhostmedia]#dockerimages\\查看镜像 [root@localhostmedia]#dockercreate-itdocker.io/networkboot/dhcpd/bin/bash\\创建容器 dfbe3a15f462d82674cfdfe87dfb7c4b4b1dcf2267e5c0043510cbe10f11a65b [root@localhost/]#dockerps-a\\查看容器 CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES dfbe3a15f462docker.io/networkboot/dhcpd"/entrypoint.sh/b..."AboutaminuteagoCreateddetermined_dubinsky [root@localhost/]#dockerstartdfbe3a15f462\\启动容器 dfbe3a15f462 [root@localhost/]#dockerexec-itdfbe3a15f462/bin/bash root@dfbe3a15f462:/#touch123\\创建俩个文件 root@dfbe3a15f462:/#touch456(2)启动镜像,在容器中进行修改,然后将修改后的容器作为新镜像提交。你需要记住集装箱的D号,例如:
[root@localhost/]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES dfbe3a15f462docker.io/networkboot/dhcpd"/entrypoint.sh/b..."5minutesagoUp2minutesdetermined_dubinsky(3)使用dockercommit命令创建新镜像,如下所示:
[root@localhost/]#dockercommit-m"newdhcp"-a"xws"dfbe3a15f462docker:mydhcp sha256:2c1acb192f78bbbb584fc52954a179eb0f10730e0cd58d120d952439ead45b00(4)创建完成后,将返回新创建镜像的ID信息。检查本地镜像列表以查看新创建的镜像信息:
[root@localhost/]#dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE dockermydhcp2c1acb192f78Aboutaminuteago125MB docker.io/networkboot/dhcpdlatest6f98b6b9b48619monthsago125MB(2)基于本地模板创建。
镜像可以通过导入 *** 作系统模板文件生成,模板可以从OPENVZ开源项目下载。下载地址是
http://openvz.org/download/template/precreated.
使用命令下载,如下所示
wgethttp://down1oad.openvz.org/template/precreated/ubuntu-12.04-x86_64-minimal.tar.gz(3)基于Dockerfile创建
除了手动生成Docker图像,您还可以使用Dockerfile自动生成图像。Dockerfile是一个由-组指令组成的文件,其中每个指令对应于Linux中的一个命令。Docker程序将读取Dockerfile中的指令来生成指定的图像。
Dockerfile结构大致分为四个部分:基本镜像信息、维护者信息、镜像 *** 作指令和容器启动执行指令。
编写Dockerfile时,有严格的格式可循:第一行必须使用FROM指令指明它所基于的图像的名称;然后使用维护者指令解释图像的用户信息;然后是和图像 *** 作相关的指令,比如RUN指令,每次运行都会在基础图像上增加一个新的图层;最后,CMD指令用于指定容器启动时要运行的命令 *** 作。
案例:用Dockerfile创建一个镜像,并在容器中运行它
1.建立工作目录
[root@localhost/]#mkdirapache [root@localhost/]#cdapache/2.创建并写入Dockerfile文件
[root@localhostmedia]#dockerload<centos\\先把centos载入到本地 [root@localhostapache]#vimDockerfile FROMcentos\\基于centos基础镜像 MAINTAINERTheCentosprojier\\维护该镜像用户信息,后面随便写 RUNyum-yupdate\\镜像 *** 作指令安装apache软件包 RUNyum-yinstallhttpd EXPOSE80\\开启80端口 ADDindex.html/var/www/html/index.html//复制网站首页文件 ADDrun.sh/run.sh//将执行脚本复制到镜像中 RUNchmod775/run.sh RUNsystemctldisablehttpd\\设置apache开启不启动 CMD【“/run.sh”】\\启动容器执行脚本3.编写执行脚本内容。
[root@localhostapache]#vimrun.sh #!/bin/bash rm-rf/run/httpd/*\\清理http的缓存 exec/usr/sbin/apachectl-DFOREGROUND\\启动apache服务4.创建测试页面
[root@localhostapache]#echo"asd">index.html [root@localhostapache]#ls Dockerfileindex.htmlrun.sh5.使用Dockerfile生成图像
编写Dockerfile和相关内容后,可以通过dockerbuild命令创建镜像。
Docker构建[选项]路径
使用刚刚编写的dockerfile文件自动生成镜像。
[root@localhostapache]#dockerbuild-thttpd:centos.在自动生成图像的命令指定图像后,不要忘记写入新生成图像的存储路径,即一个“.”空框后表示当前路径,否则会报错。
6.使用新图像运行容器。
将新生成的图像加载到容器中并运行它。
[root@localhost/]#dockerrun-d-p12345:80httpd:centos ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243 [root@localhostapache]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 99e9234cefe5httpd:centos"/run.sh"8secondsagoUp7seconds0.0.0.0:12345->80/tcpyouthful_lumiere dfbe3a15f462docker.io/networkboot/dhcpd"/entrypoint.sh/b..."56minutesagoUp53minutesdetermined_dubinsky //使用新生成的镜像加载到容器中运行 //“-p”选项实现从本地端口12345到容器中80端口的映射用浏览器访问网页
二。Docker的数据管理
在Docker中,为了方便查看一个容器中生成的数据或者在多个容器之间共享数据,会涉及到容器的数据管理 *** 作。管理Docker容器中的数据有两种主要方式:数据卷和数据卷容器。
(1)数据量
数据卷是容器使用的特殊目录。它位于容器中,主机的目录可以挂载在数据卷上。修改数据量可以立即看到,更新数据不会影响镜像,从而实现主机和容器之间的数据迁移。数据的使用类似于Linux下目录的挂载 *** 作。
1.创建数据卷
[root@localhost/]#dockerrun-d-v/data1-v/data2--namewebhttpd:centos 4944c63124d2f96bedd78b4016e6d96e464089626e97b913b06ec888e7ab8f65 [root@localhost/]#dockerexec-itweb/bin/bash\\进入容器可以看到已经和宿主机一样了 [root@4944c63124d2/]#ls anaconda-post.logbootdata2etclibmediaoptrootrun.shsrvtmpvar bindata1devhomelib64mntprocrunsbinsysusr [root@4944c63124d2/]#(2)将主机目录作为数据卷挂载
例如
[root@localhost/]#dockerrun-d-v/var/www:/xws--nameweb-1httpd:centos 05079057bf0c7c47b14fd457d1a5df0e29f080b6103753399654ef9d0aa4bf0f中间:前面是主机的目录,后面是容器中的目录。
[root@localhost/]#cd/var/www/ [root@localhostwww]#touchasdasdasd [root@localhostwww]#ls asdasdasd看一下集装箱。
[root@localhost/]#dockerexec-itweb-1/bin/bash [root@05079057bf0c/]#ls anaconda-post.logbootetclibmediaoptrootrun.shsrvtmpvar bindevhomelib64mntprocrunsbinsysusrxws [root@05079057bf0c/]#cdxws [root@05079057bf0cxws]#ls asdasdasd您可以看到主机与容器共享
(2)数据卷容器
[root@localhost/]#dockerrun-it--volumes-fromweb--name777httpd:centos/bin/bash [root@d6324596cb2c/]#cddata1 [root@d6324596cb2cdata1]#touchfile [root@d6324596cb2cdata1]#exit exit [root@localhost/]#dockerexec-itweb/bin/bash [root@4944c63124d2/]#ls 123bindata1devhomelib64mntprocrunsbinsysusr anaconda-post.logbootdata2etclibmediaoptrootrun.shsrvtmpvar [root@4944c63124d2/]#cddata1 [root@4944c63124d2data1]#ls file [root@4944c63124d2data1]#您可以看到这两个容器是共享的。
(3)Docker网络通信
Docker提供了一种互连机制,将容器端口映射到主机和容器,为容器提供网络服务。
要实现端口映射,需要在运行Dockerrun命令时使用-P(大写)选项实现随机映射。Docker会将端口范围为49000~49900的端口随机映射到容器内部的开放网络端口。
1.端口映射
[root@localhost/]#dockerrun-d-Phttpd:centos 70762709d90a8365803b8b13be02e06e2f9c0b4fdb8624bad01d579817809 [root@localhost/]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 70762709d90ahttpd:centos"/run.sh"5secondsagoUp4seconds0.0.0.0:**32768**->80/tcpkickass_bhaskara您可以看到端口变成了32768。
您也可以指定一个端口。
[root@localhost/]#dockerrun-d-p123:80httpd:centos 9c7b1b3989b30f44c22276a62674e565daf410e05bdf0b4892c09dca226622532.集装箱互连
容器互连是通过容器的名称建立一个专用的网络通信隧道,实现容器之间的互连。简单来说,源容器和接收容器之间会建立一个隧道,接收容器可以看到源容器指定的信息。在运行dockerrun命令时,使用-link选项来实现容器之间的互联和通信。
格式为:
-链接名称:别名\别名
创建源容器
[root@localhost/]#dockerrun-d-P--nameweb1httpd:centos 0105f396c69b15557af4c15a62143872e725a28050075b554a4d2765a504d558创建接收容器
使用dockerrun命令构建容器b,--name将名称指定为web2。-link指定连接容器,实现容器互联。
[root@localhost/]#dockerrun-d-P--nameweb2--linkweb1:web1httpd:centos 10413ec7492d1d4bab724b4ecf2c2378dae6f496d14c2d68d27ee29b6a26bb1a测试容器互连
[root@localhost/]#**dockerexec-itweb2/bin/bash** [root@10413ec7492d/]#**pingweb1** PINGweb1(172.17.0.8)56(84)bytesofdata. 64bytesfromweb1(172.17.0.8):icmp_seq=1ttl=64time=0.153ms 64bytesfromweb1(172.17.0.8):icmp_seq=2ttl=64time=0.063ms 64bytesfromweb1(172.17.0.8):icmp_seq=3ttl=64time=0.064ms 64bytesfromweb1(172.17.0.8):icmp_seq=4ttl=64time=0.074ms 64bytesfromweb1(172.17.0.8):icmp_seq=5ttl=64time=0.065ms 64bytesfromweb1(172.17.0.8):icmp_seq=6ttl=64time=0.065ms这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)