上一篇:Docker(6)—安装mysql
使用dockerfile
自定义镜像文件最好配合Docker(5)—数据卷查看保留字指令;
或者直接看下图:
以构建一个自己的centos
镜像包为例:
#分别执行以下命令:
cd /home
mkdir docker_volume
vi dockerfile
然后在 dockerfile中输入以下命令
#设置基础镜像
FROM centos
#设置镜像包作者和邮箱
MAINTAINER magic<[email protected]>
#设置环境变量(MYPATH是自定义的一个名字,有点像key:value结构中的key值)
ENV MYPATH /usr/local
#设置工作空间;使用$符号获取到MYPATH对应的地址(即/usr/local),进入该镜像容器中的时候就会到/ur/local目录下
WORKDIR $MYPATH
#RUN:容器构建时需要执行的命令,这里使用yum方式下载 vim ,net-tools等常用指令库
RUN yum -y install vim
RUN yum -y install net-tools
#暴露端口
EXPORE 80
#容器启动的时候需要执行的命令
CMD echo $MYPATH
CMD 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 images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.0 8a4517a9ef80 5 seconds ago 237MB
tomcat latest 1b6b1fe7261e 2 weeks ago 647MB
nginx latest 9beeba249f3e 2 weeks ago 127MB
mysql latest a0d4d95e478f 2 weeks ago 541MB
elasticsearch 7.6.2 f29a1ee41030 2 months ago 791MB
centos 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c604dcc93dc6 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 ]# ll
total 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3476abbbc14a 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 /]# ls
bin 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]# ls
file01.txt
[root@3476abbbc14a volume01]#
发现容器内的volume01
文件夹中也有file01
文件,说明之前在宿主机的/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
中创建的文件与容器数据共享成功。