让我们探索docker容器数据卷的概念和使用方法:
1、什么是Docker容器数据卷?
首先,让我们回顾一下Docker的核心理念:
Docker将应用程序及其运行环境打包成容器进行运行。尽管容器可以随应用一起运行,但我们希望数据能够持久化,并且在容器之间能够共享数据。如果容器生成的数据没有通过docker commit生成新镜像并保存为镜像的一部分,那么当容器被删除时,数据也会随之丢失。
为了在Docker中保存数据,我们使用数据卷。
一句话概括:数据卷有点类似于Redis中的RDB和AOF文件。
2、数据卷的功能
3、在容器内添加数据卷
3.1、直接使用命令添加
使用以下命令可以在启动容器时直接添加数据卷:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
例如:
docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash

要查看数据卷是否成功挂载,可以使用以下命令:
docker inspect 容器ID

容器和宿主机之间的数据共享示例如下:

容器停止退出后,宿主机修改后数据是否同步:

如果需要在容器内设置只读权限,可以使用以下命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

3.2、在Dockerfile中添加
在根目录下创建一个名为mydocker的文件夹,并进入该文件夹。在Dockerfile中,可以使用VOLUME指令为镜像添加一个或多个数据卷:
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
注意:为了保证镜像的可移植性和分享性,使用-v 主机目录:容器目录的方法无法直接在Dockerfile中实现。因为宿主机目录依赖于特定的宿主机,并不能保证在所有宿主机上都存在这样的特定目录。
Dockerfile构建:

构建后生成镜像:

获得一个新镜像zzyy/centos。
运行容器:

通过上述步骤,容器内的卷目录地址已经知道,但对应的主机目录地址在哪里呢?

主机对应默认地址:

3.3、备注
如果在挂载宿主机目录时Docker访问出现cannot open directory .: Permission denied,可以通过在挂载目录后添加--privileged=true参数来解决。
4、数据卷容器
4.1、什么是数据卷容器?
数据卷容器是指挂载了数据卷的容器,其他容器可以通过挂载这个父容器来实现数据共享。
4.2、总体介绍
以上一步新建的镜像zzyy/centos为模板,运行容器dc01/dc02/dc03,它们已经具有容器卷/dataVolumeContainer1和/dataVolumeContainer2。
4.3、容器间传递共享(--volumes-from)
首先启动一个父容器dc01:

在dataVolumeContainer2中添加内容。
然后,dc02和dc03通过--volumes-from命令继承自dc01,分别在dataVolumeContainer2中添加内容:
docker run -it --name dc02 --volumes-from dc01 zzyy/centos

回到dc01可以看到dc02和dc03各自添加的内容都能共享:

删除dc01后,dc02修改后dc03是否可以访问:

删除dc02后dc03是否可以访问:

进一步测试:

新建dc04继承自dc03,然后删除dc03:

结论:容器之间通过--volumes-from命令可以实现数据卷的共享,数据卷的生命周期会持续到没有任何容器使用它为止。
以上就是Docker之容器数据卷的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号