作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/16101991.html
数据卷容器 理解
- 用户需要在多个容器之间共享一些持续更新的数据,最简单方法就是使用数据卷容器
数据卷容器也是一个容器,但它的目的是专门提供数据卷给其他容器挂载
- 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器!
- 与容器数据卷相连
例:使用上一步的镜像:zzz/centos 为模板,运行容器 docker01,docker02,docker03,他们都会具有容器卷。

测试一下容器间传递共享
1、先启动一个父容器docker01,然后在dataVolumeContainer2新增文件
| docker images zzz/centos |
| docker run -it --name docker01 zzz/centos |
| ll |
| cd dataVolumeContainer2/ |
| touch docker01.txt |
| ls |
| 退出不停止:ctrl+P+Q |
| docker ps |
2、创建docker02,docker03 让他们继承docker01 --volumes-from
| [root@zheng docker-test-volume]# docker run -it --name docker02 --volumes-from docker01 zzz/centos #启动docker02容器 --volumes-from 进行挂载 继承docker01 |
| [root@ea4c82779077 /]# cd /dataVolumeContainer2 #进入数据卷 |
| [root@ea4c82779077 dataVolumeContainer2]# ls #查看docker01创建的文件,可证明是同步的 |
| docker01.txt |
| [root@95164598b306 dataVolumeContainer2]# touch docker02.txt #在docker02里创建一个02的文件 |
| [root@95164598b306 dataVolumeContainer2]# ls |
| docker01.txt docker02.txt |
| |
| #再启动一个 docker03 继承 docker01 ;也可以继承 docker02 |
| [root@zheng docker-test-volume]# docker run -it --name docker03 --volumes-from docker01 zzz/centos #启动docker03容器 --volumes-from 进行挂载 继承docker01 |
| [root@ea4c82779077 /]# cd /dataVolumeContainer2 #进入数据卷 |
| [root@ea4c82779077 dataVolumeContainer2]# ls #查看docker01和docker02创建的文件,可证明是同步的 |
| docker01.txt docker02.txt |
| [root@95164598b306 dataVolumeContainer2]# touch docker03.txt #在docker03里创建一个02的文件 |
| [root@95164598b306 dataVolumeContainer2]# ls |
| docker01.txt docker02.txt docker03.txt |
证明:只要通过--volumes-from
就可以实现容器间的数据共享
3、回到docker01发现可以看到 02 和 03 添加的共享文件
| [root@zheng docker-test-volume]# docker attach docker01 |
| [root@799b6ea5db7c dataVolumeContainer2]# ls -l |
| total 0 |
| -rw-r |
| -rw-r |
| -rw-r |
4、删除docker01,docker02 修改后docker03还能不能访问
| [root@zheng docker-test-volume]# docker rm -f docker01 # 删除容器docker01 |
| docker01 |
| [root@zheng docker-test-volume]# docker attach docker02 #进入容器docekr02 |
| [root@ea4c82779077 dataVolumeContainer2]# ls -l #进入数据卷查看文件 |
| total 0 |
| -rw-r--r-- 1 root root 0 May 11 13:20 docker01.txt |
| -rw-r--r-- 1 root root 0 May 11 13:22 docker02.txt |
| -rw-r--r-- 1 root root 0 May 11 13:24 docker03.txt |
| [root@ea4c82779077 dataVolumeContainer2]# touch docker02-update.txt #创建一个文件达到修改目的 |
| [root@ea4c82779077 dataVolumeContainer2]# ls -a |
| . .. docker01.txt docker02.txt docker02-update.txt docker03.txt |
| [root@ea4c82779077 dataVolumeContainer2]# Ctrl+P+Q 退出容器并不停止 |
| [root@zheng docker-test-volume]# docker attach docker03 #进入容器docekr03 |
| [root@95164598b306 dataVolumeContainer2]# ls -l #进入数据卷查看文件 |
| total 0 |
| -rw-r--r-- 1 root root 0 May 11 13:20 docker01.txt |
| -rw-r--r-- 1 root root 0 May 11 13:22 docker02.txt |
| -rw-r--r-- 1 root root 0 May 11 13:29 docker02-update.txt |
| -rw-r--r-- 1 root root 0 May 11 13:24 docker03.txt |
仍可访问;数据共享并不是容器丢了就没了,只要有一个容器还在数据就不会丢失!
5、删除docker02 ,docker03还能不能访问
| [root@zheng docker-test-volume]# docker ps #查看镜像 |
| CONTAINER ID IMAGE |
| 95164598b306 zzz/centos |
| ea4c82779077 zzz/centos |
| [root@zheng docker-test-volume]# docker rm -f docker02 #删除容器docker02 |
| docker02 |
| [root@zheng docker-test-volume]# docker attach docker03 #进入容器docekr03 |
| [root@95164598b306 dataVolumeContainer2]# ls -l #查看文件仍在 |
| total 0 |
| -rw-r--r-- 1 root root 0 May 11 13:20 docker01.txt |
| -rw-r--r-- 1 root root 0 May 11 13:22 docker02.txt |
| -rw-r--r-- 1 root root 0 May 11 13:29 docker02-update.txt |
| -rw-r--r-- 1 root root 0 May 11 13:24 docker03.txt |
| [root@95164598b306 dataVolumeContainer2]# touch docker03-update.txt #创建一个文件达到修改目的 |
- 结果:这是一个备份的机制,容器内的共享卷是一个双向拷贝的概念,尽管删除了容器,数据仍在!
6、新建docker04继承docker03,然后再删除docker03,看下是否可以访问
| docker run -it |
| [root@2119f4f23a92 /]# cd dataVolumeContainer2 |
| [root@2119f4f23a92 dataVolumeContainer2]# ls -l #查看文件已经同步 |
| total 0 |
| -rw-r |
| -rw-r |
| -rw-r |
| -rw-r |
| -rw-r |
| |
| # 查看当前运行的容器 |
| [root@zheng docker-test-volume]# docker ps |
| CONTAINER ID IMAGE NAMES |
| 2119f4f23a92 zzz/centos docker04 |
| 95164598b306 zzz/centos docker03 |
| |
| # 继续删除docker03 |
| [root@zheng docker-test-volume]# docker rm -f docker03 |
| docker03 |
| [root@zheng docker-test-volume]# docker attach docker04 |
| [root@2119f4f23a92 dataVolumeContainer2]# ls -l |
| total 0 |
| -rw-r |
| -rw-r |
| -rw-r |
| -rw-r |
| -rw-r |
多个mysql实现数据共享
| |
| |
| 拉取镜像:docker pull mysql:5.7 |
| |
| |
| 启动 mysql01 可以只写卷,不要主机路径 |
| [root@zheng home] |
| |
| 启动 mysql02 可以不需要目录,挂载的name是相同的 |
| [root@zheng home] |
| |
| |
| |
得出结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用它为止。只要持久到本机上,存储在本机的文件则会一直保留!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)