博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker(8)---匿名卷(匿名挂载)和命名卷(具名挂载)
阅读量:3948 次
发布时间:2019-05-24

本文共 7872 字,大约阅读时间需要 26 分钟。

在这里插入图片描述

上一篇:

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 psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES38d2810685e1        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 imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              latest              470671670cac        4 months ago        237MB#2.启动centos镜像并且使用命名挂载的方式进行数据卷挂载(此centos是官网下载的官方镜像包)[root@privateCloud / ]# docker run -it -d --name mycentos -v /home/centos_volume:/usr/local/volume01 470671670cac48dece440eb377a466d72327895c5ed24a75823e70ffebf40fee0e2fe9e4c66e#3.查看刚刚启动的容器id[root@privateCloud / ]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES48dece440eb3        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]# lsbin  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]# lsfile01.txt#7.使用 ctrl+p+Q 不停止容器退出#8.进行宿主机 容器卷 所在路径[root@privateCloud /home/centos_volume ]# cd /home/centos_volume/#9.发现多了一个 file01文件,说明数据挂载成功[root@privateCloud /home/centos_volume ]# lltotal 0-rw-r--r-- 1 root root 0 Jun  1 17:17 file01.txt#10.此时将启动的容器停掉:[root@privateCloud /home/centos_volume ]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES48dece440eb3        470671670cac        "/bin/bash"         8 minutes ago       Up 8 minutes                            mycentos[root@privateCloud /home/centos_volume ]# docker stop 48dece440eb348dece440eb3#11.然后重新进入该容器[root@privateCloud /usr/local ]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              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 psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESa842a7e8d514        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]# lsfile01.txt#13.查看该file01.txt文件[root@a842a7e8d514 volume01]# cat file01.txt this file create in container

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

#1.查看镜像[root@privateCloud /usr/local ]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              latest              470671670cac        4 months ago        237MB#2.使用匿名挂载的方式只指定容器内数据卷所在路径启动镜像[root@privateCloud /usr/local ]# docker run -it -d --name mycentos -v /usr/local/centos 470671670cac175034d3759bb678877fcaaba6db2b9cd50aa9e61a7cb5770a48370032f07d1f#3.进入 容器内数据卷所在路径[root@privateCloud /usr/local ]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES175034d3759b        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 psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES175034d3759b        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 ]# lltotal 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES19a23edc6aeb 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]#

转载地址:http://jphwi.baihongyu.com/

你可能感兴趣的文章
对于初学者练习的6个开源项目
查看>>
保持冷静和需要打破的东西:软件测试初学者
查看>>
如何通过连接您的业务应用程序来节省时间
查看>>
熟悉现代JavaScript的培训计划
查看>>
7本书从小工到数据分析专家
查看>>
程序设计的基本原则:栈和堆
查看>>
Android应用程序架构
查看>>
Android:绘制自定义视图
查看>>
Android开发:一些有用的库(第一部分)
查看>>
Android 默认暗码
查看>>
Android 系列 1.3了解Android版本
查看>>
Android 系列 6.28使用正确的复数格式化
查看>>
Android 系列 6.29创建在两个活动之间显示的加载屏幕
查看>>
Android的Gradle技巧 1.2配置SDK版本和其他默认值
查看>>
Android的Gradle技巧 1.3从命令行执行Gradle构建
查看>>
Android的Gradle技巧 1.4从Android Studio执行Gradle构建
查看>>
Android的Gradle技巧 1.5添加Java库依赖关系
查看>>
Android的Gradle技巧 1.6使用Android Studio添加库依赖关系
查看>>
Android的Gradle技巧 1.7配置存储库
查看>>
android Collections 排序,
查看>>