目录
1. 宿主和容器之间映射添加容器卷
2. 查看容器卷是否挂载成功
3. 容器卷 ro 和 rw 读写规则
4. 卷的继承与共享
1. 宿主和容器之间映射添加容器卷
公式:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
示例:通过在docker内新建文件,验证host下是否同步该文件
# 1. 新建并进入容器,添加容器卷映射关系
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
# 2. 进入容器内/tmp/docker_data 目录
cd /tmp/docker_data
# 3. 新建 docker.txt文件
touch docker.txt
# 4. 退出容器
exit
# 进入宿主机内的/tmp/host_data目录
cd /tmp/host_data
# 查看在docker内新建的docker.txt文件是否存在
ls
注意:当我们停掉容器的时候,在宿主机上新建文件,然后再开启容器并进入,该文件也会被同步更新到容器中,因此容器卷与容器状态无关。
2. 查看容器卷是否挂载成功
语法:docker inspect 容器id
# 查看容器id
docker ps -a
# 查看是否挂载成功
docker inspect 7c528181c837
如果挂载成功,则inspect命令下的mount字段会有如下显示:
3. 容器卷 ro 和 rw 读写规则
在默认情况下,使用第一节中:宿主和容器之间映射添加容器卷的命令时,默认的读写方式是主机和容器内都可以进行读写操作,即默认为如下公式,只是省略了后面的冒号,即
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
但如果想容器实例内部被限制,只能读取宿主机上的文件,但不能进行写操作,需要如下命令:
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
即此时如果宿主机写入内容,可以同步给容器,容器可以读取到,但不能进行写操作
4. 卷的继承与共享
按照上述操作u1完成了和宿主机的映射,而容器u2如想继承u1的卷规则,可以使用如下命令:
语法:docker run -it --privileged=true -volumes-from 父类 --name u2 镜像名
docker run -it --privileged=true --volumes-from=u1 --name=u2 ubuntu
通过上述操作可以实现主机和两个容器之间的数据共享,比如在u2新建一个文件,主机和u1均会进行同步。如果我们停掉了u2的容器,然后再宿主机上新建一个文件,则u1会直接同步,那当u2重启之后进入也能查看到该文件。本质上宿主机和多个容器能够共享所有文件,尽管某一容器停止,当其他容器和宿主机进行文件操作时,该容器重启进入后文件还会进行同步和更新。
注:该博客中部分为内容来自于的 容器卷之间的继承 学习笔记,仅供参考。如看其他Docker内容,可看我博客Docker系列aaron_neil_Dcoker系列,持续更新中。