本文共 4724 字,大约阅读时间需要 15 分钟。
使用dockerfile
自定义镜像文件最好配合查看保留字指令;
或者直接看下图:
以构建一个自己的centos
镜像包为例:
#分别执行以下命令:cd /homemkdir docker_volumevi dockerfile
然后在 dockerfile中输入以下命令
#设置基础镜像FROM centos#设置镜像包作者和邮箱MAINTAINER magic<304897438@qq.com>#设置环境变量(MYPATH是自定义的一个名字,有点像key:value结构中的key值) ENV MYPATH /usr/local#设置工作空间;使用$符号获取到MYPATH对应的地址(即/usr/local),进入该镜像容器中的时候就会到/ur/local目录下WORKDIR $MYPATH#RUN:容器构建时需要执行的命令,这里使用yum方式下载 vim ,net-tools等常用指令库RUN yum -y install vimRUN yum -y install net-tools#暴露端口EXPORE 80#容器启动的时候需要执行的命令CMD echo $MYPATHCMD echo "-------------build end----------------"CMD /bin/bash
然后再进行镜像构建:
[root@iZ2zearkb2a36wkifspfmkZ docker_volume]# docker build -f dockerfile -t mycentos:1.0 .
使用docker images
命令查看新构建的镜像:mycentos:1.0
[root@privateCloud /home/docker_volume ]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmycentos 1.0 8a4517a9ef80 5 seconds ago 237MBtomcat latest 1b6b1fe7261e 2 weeks ago 647MBnginx latest 9beeba249f3e 2 weeks ago 127MBmysql latest a0d4d95e478f 2 weeks ago 541MBelasticsearch 7.6.2 f29a1ee41030 2 months ago 791MBcentos latest 470671670cac 4 months ago 237MB
启动自定义的centos镜像:
[root@privateCloud /home/docker_volume ]# docker run -it 8a4517a9ef80
发现在自定义的centos
镜像的根目录中(输入:“cd / ” 命令可以查看到这两个文件)
多了两个文件:volume01
和volume02
,这是在自定义的dockerfile
中设置的数据挂载文件;
mycentos01
镜像容器:ctrl+p+(容器不停止退出)
因为前面的dockerfile
中设置挂载文件的时候是匿名挂载(随着容器建立而建立,随着容器消亡而消亡,所以只存储无关痛痒的数据)
查看mycentos01
镜像容器的挂载设置:
[root@privateCloud /home/docker_volume ]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc604dcc93dc6 8a4517a9ef80 "/bin/sh -c /bin/bash" 4 minutes ago Up 4 minutes gallant_carson[root@privateCloud /home/docker_volume ]# docker inspect 8a4517a9ef80
然后找到Mounts
信息
"Mounts": [ { "Type": "volume", "Name": "d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6", "Source": "/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data", "Destination": "volume01", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a", "Source": "/var/lib/docker/volumes/8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a/_data", "Destination": "volume02", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
从以上这段信息中可以看到与volume01
进行数据共享的是/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
文件,与volume02
进行数据共享的是/var/lib/docker/volumes/8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a/_data
文件。可以通过小测试进行验证:
在宿主机中的/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
目录中创建一个新的文本文件:
[root@privateCloud /home/docker_volume ]# cd /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]# touch file01.txt[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]# lltotal 0-rw-r--r-- 1 root root 0 Jun 1 11:26 file01.txt[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]#
然后再进入mycentos
容器:
[root@privateCloud / ]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3476abbbc14a 9bbf7f944441 "/bin/bash" 45 minutes ago Up 45 minutes naughty_wilson[root@privateCloud / ]# [root@privateCloud / ]# [root@privateCloud / ]# docker exec -it 3476abbbc14a /bin/bash[root@3476abbbc14a /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02[root@3476abbbc14a /]# cd volume01[root@3476abbbc14a volume01]# lsfile01.txt[root@3476abbbc14a volume01]#
发现容器内的volume01
文件夹中也有file01
文件,说明之前在宿主机的/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
中创建的文件与容器数据共享成功。
转载地址:http://cphwi.baihongyu.com/