欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

容器数据卷(6)

程序员文章站 2022-04-18 23:15:28
...

从docker容器拷贝文件到主机:命令是docker cp 容器的路径:主机的目的路径
容器数据卷的概念:1.数据持久化 2。容器和主机之间的数据共享
一、方式一:使用命令直接添加数据卷
1.docker run 镜像名
2.docker run -it 镜像名
3.docker run -it -v /宿主机绝对路径目录:/容器内绝对路径目录 镜像名。
-v 参数是卷的意思,该条命令加了数据卷,相当于目录挂载。
如:docker run -it -v /mydataVolume:/dataValumeContainer centos
如下图所示容器内在根目录下会多出“dataValumeContainer”目录
容器数据卷(6)
主机中也会在根目录下多出“mydataVolume”目录,使用docker inspect 容器id,可以看出来主机与容器的之间挂载的目录及操作权限,如下图:
容器数据卷(6)
4.docker run -it -v /宿主机绝对路径目录:/容器内绝对路径目录:ro 镜像名。
-v 参数是卷的意思,该条命令加了数据卷,相当于目录挂载。
ro :指的是read only
此处可以通过-v参数来实现容器与主机之间的数据共享。

二、方式二:使用dockerfile来添加

Java中Hello.java---->Hello.class
Docker中images---->Dockefile文件
可以在Dockefile文件中使用VOLUME命令来给镜像添加一个或者多个数据卷

VOLUME [“/绝对路径数据卷的目录1”,”/绝对路径数据卷的目录2”,”/绝对路径数据卷的目录3”]

该数组可以是一个或多个目录。
容器数据卷(6)
1.在根目录下新建mydocker文件夹
2.在dockerFile中使用VOLUME指令来增加数据卷,脚本如下
① touch Dockerfile
② vim Dockerfile
③ 输入脚本:VOLUME指令
④ 重新build生成镜像
⑤ run容器。
⑥ docker inspect 容器id,得到主机随机生成的挂载的主机目录。

三、备注:

当使用方式一在docker主机目录挂载后,出现cannot open directory:Permission denfined.
解决方法:在挂载命令的后面加上 --privileged=true参数即可。如:
docker run -it -v /宿主机绝对路径目录:/容器内绝对路径目录 --privileged=true 镜像名。

四、数据卷的总结:
容器数据卷(6)
五、数据卷容器

相当于父容器,其余子容器也可以共享挂载的目录。以doc01是父容器,doc02和doc03为子容器为例。
以上面的doc01为父容器,该容器中已经有dataVolumecontainer1和dataVolumecontainer2两个挂载目录。
容器数据卷(6)
(1)具体操作步骤:

1.启动doc01, docker run -it --name doc01 镜像名称
2.在dataVolumecontainer1容器中新建一个文件doc01_add.txt
3.容器doc02继承doc01。启动doc02, docker run -it --name doc02 --volume-from 镜像名称
4.查看doc02容器的dataVolumecontainer1目录,有doc01_add.txt
新建了一个文件doc02_add.txt
5.同理,容器doc03继承doc01。启动doc03, docker run -it --name doc03 --volume-from 镜像名称。查看doc03容器的dataVolumecontainer1目录,新建doc03_add.txt
6.回到doc01中,可以看到doc02_add.txt和doc03_add.txt
分别查看doc01.doc02、doc03,可以看到dataVolumecontainer1目录的文件是一样的!

(2)删除掉doc01后,doc02和doc03的dataVolumecontainer1目录的文件还有的。Doc02和doc03依旧可以共享数据,比如在doc02的dataVolumecontainer1目录下,新建doc02_update.txt,在doc03中同样是可看到的。
容器数据卷(6)
(3)继续删除doc02后,doc03可以访问

(4)创建一个doc04,继承doc03,可以看到doc01,doc02,doc03所有的文件,删除doc03后,doc04的文件依旧可以访问并不受影响。

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止!

相关标签: docker

上一篇: DockerFile

下一篇: Dockerfile