Docker数据管理与网络通信的使用
可以通过Dokcer核心及安装来安装Docker及简单操作。
一.Docker镜像的创建方法
Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式。一个完整的Docker镜像可以支撑--个Docker容器的运行,在Docker的整个使用过程中,进入--个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境及搭建的服务生成新的镜像。
(1)基于已有镜像创建
基于已有镜像创建主要使用dockercommit命令。其实质就是把一个容器里面运行的程序及该程序的运行环境打包起来生成新的镜像。
命令格式如下:
dockercommit【选项】容器ID/名称仓库名称:【标签】
参数如下:
- -m:说明信息
- -a:作者信息
- -p:生成过程中停止镜像来创建新镜像
(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(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结构大致分为4个部分:基础镜像信息、维护者信息.镜像操作指令和容器启动时执行指令
在编写Dockerfile时,有严格的格式需要遵循:第一行必须使用FROM指令指明所基于的镜像名称:之后使用MAINTAINER指令说明维护该镜像的用户信息:然后是镜像操作相关指令,如RUN指令,每运行一条指令,都会给基础镜像添加新的一层;最后使用CMD指令来指定启动容器时要运行的命令操作。
案例:使用Dockerfile创建镜像并在容器中运行
1.建立工作目录
[root@localhost/]#mkdirapache [root@localhost/]#cdapache/2.创建并编写Dockerfile文件
[root@localhostmedia]#dockerload3.编写执行脚本内容
[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命令来创建镜像。
dockerbuild【选项】路径
使用方才编写的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容器中的数据主要有两种方式:数据卷(DataVolumes)和数据卷容器(DataVolumesContainers)。
(1)数据卷
数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像.从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。
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选项实现容器之间的互联通信。
格式为:--linkname:alias\别名
创建源容器
[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以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。