Docker(7)---自定义镜像并设置镜像挂载

在这里插入图片描述

上一篇: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 / ” 命令可以查看到这两个文件)多了两个文件:volume01volume02,这是在自定义的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中创建的文件与容器数据共享成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章