23-数据卷之Dockerfile

前面我们通过容器数据卷来做的,现在我们通过Dockerfile来实现
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,我们的命令是一个个的命令,一个命令对应一层

我们可以在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷。
下面使用Dockerfile构建一个新的镜像,dockerfile01文件(推荐使用dockerfile的名字)的内容,匿名挂载了volume01和volume02两个目录:
文件中的内容:指令(大写) 参数

FROM centos

VOLUME ["volume01","volume02"]     

CMD echo "----end----"
CMD /bin/bash

执行构建镜像
-f:我们脚本的路径
-t:我们生成的镜像的名称,:后面是版本,可加可不加
docker build -f /home/docker-test-volume/dockerfile01 -t ethan/centos:1.0 .

    [root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t ethan/centos:1.0 .
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM centos
     ---> 300e315adb2f
    Step 2/4 : VOLUME ["volume01","volume02"]
     ---> Running in 215ef28fd5a6
    Removing intermediate container 215ef28fd5a6
     ---> f506ddf133d2
    Step 3/4 : CMD echo "----end----"
     ---> Running in 62a1c4b9dc7b
    Removing intermediate container 62a1c4b9dc7b
     ---> bbea81a6e94e
    Step 4/4 : CMD /bin/bash
     ---> Running in 245d239f3776
    Removing intermediate container 245d239f3776
     ---> 1df90e6fd790
    Successfully built 1df90e6fd790
    Successfully tagged ethan/centos:1.0
    [root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker images
    REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
    ethan/centos          1.0       1df90e6fd790   13 minutes ago   209MB
    mytomcat              1.0       f189aac861de   25 hours ago     653MB
    mysql                 5.7       f07dfa83b528   7 days ago       448MB
    tomcat                latest    feba8d001e3f   11 days ago      649MB
    nginx                 latest    ae2feff98a0c   13 days ago      133MB
    centos                latest    300e315adb2f   3 weeks ago      209MB
    portainer/portainer   latest    62771b0b9b09   5 months ago     79.1MB
    elasticsearch         7.6.2     f29a1ee41030   9 months ago     791MB

启动自己的镜像


这个卷一定和外部有一个同步的目录(我们前面脚本里的卷是匿名挂载)

    [root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker inspect 828d43dba78e
    [
        {
            "Id": "828d43dba78ecaa10e7e57c1091ee8cf3581dae88187aa04163946dfc86bfd76",
            "Created": "2020-12-29T15:41:29.297091075Z",
            "Path": "/bin/bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 1719,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-12-29T15:41:34.107755138Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
    ...
    #重点:
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc",
                    "Source": "/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data",
                    "Destination": "volume01",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Type": "volume",
                    "Name": "1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f",
                    "Source": "/var/lib/docker/volumes/1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f/_data",
                    "Destination": "volume02",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],

可以看到Mounts下有宿主机的挂载目录。因为dockerfile中没有指定宿主机目录,所以属于匿名挂载,在/var/lib/docker/volumes/目录下生成了随机命名的路径。
cd到/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data,如果我们在容器的volume01中创建了container.txt文件,那么在这个路径中也一定有这个文件

这种方式我们用的很多。因为我们要通常构建自己的镜像。假如构建镜像的时候没有挂载卷,可以通过-v的方式进行挂载

posted @ 2022-01-13 20:03  不是孩子了  阅读(64)  评论(0)    收藏  举报