Docker(8)---匿名卷(匿名挂载)和命名卷(具名挂载)

在这里插入图片描述

上一篇:Docker(7)—自定义镜像并设置镜像挂载
1.什么是匿名挂载和具名挂载?

  所谓匿名挂载(匿名卷),即在进行数据卷挂载的时候不指定宿主机的数据卷目录,-v命令之后直接跟上容器内数据卷所在的路径

  而具名挂载(命名卷)即在进行数据卷挂载的时候既指定宿主机数据卷所在路径,又指定容器数据卷所在路径

  先通过下面这种命令的方式感受一下两者的区别:

#匿名挂载(匿名卷)
docker run -d -p 6379:6379 --name mycentos -v /src/volume01

#具名挂载(命名卷) -v 宿主机数据卷所在路径:容器数据卷所在路径
docker run -d -p 6379:6379 --name mycentos -v /home/docker_volume:/src/volume01

  除此种方式之外,我们也可以在在dockerfile构建docker镜像的时候使用VOLUME保留字来对数据卷进行挂载,此种挂载方式是匿名挂载的,我们可以指定一个或多个数据卷,这样只要启动了该自定义容器镜像,则会自动进行数据挂载,不会出现忘记挂载导致数据不安全的情况。

VOLUME ["容器内数据卷路径1","容器内数据卷路径2"……]

由于匿名挂载的时候只是指定了容器内数据卷的路径,至于该容器内数据卷的路径到底和宿主机中的哪个文件进行数据挂载,可以使用下面命令进行查看:

#查看当前正在运行的镜像容器id
[root@privateCloud / ]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
38d2810685e1        fc67f9b77899        "/bin/sh -c /bin/bash"   2 hours ago         Up 2 hours          80/tcp              focused_williams

#使用 inspect 查看镜像信息
[root@privateCloud / ]# docker inspect 38d2810685e1(这是容器id)
#在弹出来的信息中找到下面的数据:
"Mounts": [
            {
                "Type": "volume",
                "Name": "040a163ac1eb50ebc53b9014f2438baf3583491bfc38c0ae47c9d08ec4b009f8",
                "Source": "/var/lib/docker/volumes/040a163ac1eb50ebc53b9014f2438baf3583491bfc38c0ae47c9d08ec4b009f8/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "b7e238d439bb63d681d0c962bf44632fc76f2e82e249964023842198bfb3c16c",
                "Source": "/var/lib/docker/volumes/b7e238d439bb63d681d0c962bf44632fc76f2e82e249964023842198bfb3c16c/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
       

   从上面的 Mounts 中可以看到 Destination 和 Source 分别就是 容器内的数据卷 和 宿主机内的容器卷

2.匿名卷和命名卷的区别?

  命名卷在用过一次之后以后挂载容器的时候还是可以继续使用,所以一般在需要保存数据的时候使用命名卷的方式,下面例子用以展示命名卷对于数据的保存方式:

例:

#1.查看目前的镜像
[root@privateCloud / ]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB

#2.启动centos镜像并且使用命名挂载的方式进行数据卷挂载(此centos是官网下载的官方镜像包)
[root@privateCloud / ]# docker run -it -d --name mycentos -v /home/centos_volume:/usr/local/volume01 470671670cac
48dece440eb377a466d72327895c5ed24a75823e70ffebf40fee0e2fe9e4c66e

#3.查看刚刚启动的容器id
[root@privateCloud / ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
48dece440eb3        470671670cac        "/bin/bash"         4 minutes ago       Up 4 minutes                            mycentos

#4.进入容器内部
[root@privateCloud / ]# docker exec -it 48dece440eb3 /bin/bash

#5.查看/usr/local/,发现多了一个 volume01文件夹
[root@48dece440eb3 /]# cd /usr/local/
[root@48dece440eb3 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  volume01

#6.创建一个txt文件
[root@48dece440eb3 local]# cd volume01/
[root@48dece440eb3 volume01]# touch file01.txt
[root@48dece440eb3 volume01]# vi file01
#随便输入一段话
this file create in container

[root@48dece440eb3 volume01]# ls
file01.txt

#7.使用 ctrl+p+Q 不停止容器退出
#8.进行宿主机 容器卷 所在路径
[root@privateCloud /home/centos_volume ]# cd /home/centos_volume/

#9.发现多了一个 file01文件,说明数据挂载成功
[root@privateCloud /home/centos_volume ]# ll
total 0
-rw-r--r-- 1 root root 0 Jun  1 17:17 file01.txt

#10.此时将启动的容器停掉:
[root@privateCloud /home/centos_volume ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
48dece440eb3        470671670cac        "/bin/bash"         8 minutes ago       Up 8 minutes                            mycentos
[root@privateCloud /home/centos_volume ]# docker stop 48dece440eb3
48dece440eb3

#11.然后重新进入该容器
[root@privateCloud /usr/local ]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB
[root@privateCloud /usr/local ]# docker run -it -d --name mycentos -v /home/centos_volume:/usr/local/volume01 470671670cac

#12.直接到 /usr/local/volume01路径
[root@privateCloud /usr/local ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a842a7e8d514        470671670cac        "/bin/bash"         2 minutes ago       Up 2 minutes                            mycentos
[root@privateCloud /usr/local ]# docker exec -it a842a7e8d514 /bin/bash
[root@a842a7e8d514 /]# cd /usr/local/volume01/
[root@a842a7e8d514 volume01]# ls
file01.txt
#13.查看该file01.txt文件
[root@a842a7e8d514 volume01]# cat file01.txt 
this file create in container



  匿名卷则是随着容器的建立而建立,随着容器的关闭而消亡。匿名卷一般用来存储无关痛痒的数据。

#1.查看镜像
[root@privateCloud /usr/local ]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB

#2.使用匿名挂载的方式只指定容器内数据卷所在路径启动镜像
[root@privateCloud /usr/local ]# docker run -it -d --name mycentos -v /usr/local/centos 470671670cac
175034d3759bb678877fcaaba6db2b9cd50aa9e61a7cb5770a48370032f07d1f

#3.进入 容器内数据卷所在路径
[root@privateCloud /usr/local ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
175034d3759b        470671670cac        "/bin/bash"         About a minute ago   Up About a minute                       mycentos
[root@privateCloud /usr/local ]# docker exec -it 175034d3759b /bin/bash
[root@175034d3759b /]# cd /usr/local/centos/

#4.编辑一个文件
[root@175034d3759b centos]# vi file02
[root@175034d3759b centos]# cat file02 
this file create in container222222222

#5.使用ctrl+p+Q命令不停止并退出容器
#6.查看当前容器数据卷挂载在宿主机的文件路径
[root@privateCloud /home ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
175034d3759b        470671670cac        "/bin/bash"         7 minutes ago       Up 7 minutes                            mycentos
[root@privateCloud /home ]# docker inspect 175034d3759b

#7.从显示的信息中找到Mounts
 "Mounts": [
            {
                "Type": "volume",
                "Name": "226304086cb9042ae7150d5e27c55b88383b36c68b2796dd6a4647dc4e78ca7e",
                "Source": "/var/lib/docker/volumes/226304086cb9042ae7150d5e27c55b88383b36c68b2796dd6a4647dc4e78ca7e/_data",
                "Destination": "/usr/local/centos",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

#8.进入宿主机挂载的路径目录中
[root@privateCloud /home ]# cd /var/lib/docker/volumes/226304086cb9042ae7150d5e27c55b88383b36c68b2796dd6a4647dc4e78ca7e/_data
[root@privateCloud /var/lib/docker/volumes/226304086cb9042ae7150d5e27c55b88383b36c68b2796dd6a4647dc4e78ca7e/_data ]# ll
total 4
-rw-r--r-- 1 root root 39 Jun  1 17:45 file02

#9.发现该目录下也生成了file02文件
[root@privateCloud /var/lib/docker/volumes/226304086cb9042ae7150d5e27c55b88383b36c68b2796dd6a4647dc4e78ca7e/_data ]# cat file02 
this file create in container222222222

#10.关闭当前容器并重新使用匿名方式启动
[root@privateCloud / ]# docker run -it -d -v /usr/local/centos 470671670cac 
19a23edc6aebd23109437cac91e0011737d3e0cb29d0fad99ea884193409ec9e

#11.进入容器
[root@privateCloud / ]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
19a23edc6aeb        470671670cac        "/bin/bash"         32 seconds ago      Up 32 seconds                           laughing_wiles
[root@privateCloud / ]# docker exec -it 19a23edc6aeb /bin/bash
[root@19a23edc6aeb /]# cd /usr/local/centos/

#12.发现重新启动之后
[root@19a23edc6aeb centos]# ls
[root@19a23edc6aeb centos]# 

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值