1. 什么是容器数据卷?
将应用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
容器之间希望有可能共享数据
dcoker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存来下,那么当容器删除后,数据自然也就没有了。
为了保存数据在docker中我们使用卷。
2. 容器数据卷能做什么?
容器数据的持久化
容器之间继承和共享数据
3.添加数据卷的方式
3.1直接使用命令添加
① 语法:
docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash
②查看容器卷是否挂载成功
docker inspect 容器ID/容器名
"Mounts": [ { "Type": "bind", "Source": "/my/logs", "Destination": "/publish/logs", "Mode": "", "RW": true, "Propagation": "rprivate" }],说明挂载成功
③查看容器卷和宿主机的数据共享
在宿主机的/my/logs/文件夹中创建hello.txt,并写入数据hello
进入容器查看/publish/logs/hello.txt文件数据和/my/logs/里面一致
注意:在以上的例子中,默认只能在宿主机里面写数据
如果出现以下问题
Permission denied (权限被拒绝)
解决方法:
在挂载目录后加 --privileged=true
docker run -it -v /宿主机目录:/容器内目录 --privileged=true centos /bin/bash
3.2 使用Dockerfile添加
4.数据卷容器
作用:实现容器之间的数据共享
docker run -it --name os1 -v /my/logs:/publish/logs 57a98c20507b /bin/bash
docker run -it --name os2 --volumes-from os1 57a98c20507b /bin/bash
docker run -it --name os3 --volumes-from os2 57a98c20507b /bin/bash
测试方法:
进入os1 在logs 创建1.txt
进入os2 在logs 列表能看见1.txt 创建2.txt,
进入os3 在logs 列表能看见1.txt ,2.txt 创建3.txt
删除os1容器后,os2 os3 的logs 里面的数据不会发生变化
原因:logs文件挂载的宿主文件/my/logs文件上,(数据持久化)