容器数据卷(6)
从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”目录
主机中也会在根目录下多出“mydataVolume”目录,使用docker inspect 容器id,可以看出来主机与容器的之间挂载的目录及操作权限,如下图:
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”]
该数组可以是一个或多个目录。
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 镜像名。
四、数据卷的总结:
五、数据卷容器
相当于父容器,其余子容器也可以共享挂载的目录。以doc01是父容器,doc02和doc03为子容器为例。
以上面的doc01为父容器,该容器中已经有dataVolumecontainer1和dataVolumecontainer2两个挂载目录。
(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中同样是可看到的。
(3)继续删除doc02后,doc03可以访问
(4)创建一个doc04,继承doc03,可以看到doc01,doc02,doc03所有的文件,删除doc03后,doc04的文件依旧可以访问并不受影响。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止!
上一篇: DockerFile
下一篇: Dockerfile
推荐阅读
-
EF6 Codefirst+MySql 数据库迁移
-
预警即预防:6大常见数据库安全漏洞
-
小米上架6A快充Type-C数据线:窄弯头设计 支持120W快充
-
IE6 file表单掩藏 服务器无法获取数据
-
IE6 file表单掩藏 服务器无法获取数据
-
使用foreach和volist标签分别实现模板数据的分页显示-2018年6月1日11点30分
-
RedHat6安装Oracle数据库遇到错误 C [ld-linux-x86-64.so.2+0x14d70]
-
野生前端的数据结构基础练习(6)——集合
-
把spring boot项目发布tomcat容器(包含发布到tomcat6的方法)
-
ES6新数据类型Symbol