Docker 数据卷容器

数据卷容器 理解

  • 用户需要在多个容器之间共享一些持续更新的数据,最简单方法就是使用数据卷容器
    数据卷容器也是一个容器,但它的目的是专门提供数据卷给其他容器挂载
  • 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器!
  • 与容器数据卷相连
    例:使用上一步的镜像:zzz/centos 为模板,运行容器 docker01,docker02,docker03,他们都会具有容器卷。

测试一下容器间传递共享

1、先启动一个父容器docker01,然后在dataVolumeContainer2新增文件

docker images zzz/centos  					#查看镜像zzz/centos
docker run -it --name docker01 zzz/centos	#启动一个容器当作父容器,名字随意;有的需要加tag 例:zzz/centos:1.0
ll 		#即可看到之前的容器数据卷
cd dataVolumeContainer2/   #进入容器
touch docker01.txt	   #容器内创建文件
ls	   #查看
退出不停止:ctrl+P+Q
docker ps			#看到docker01正在运行

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--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

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 --name docker04 --volumes-from docker03 zzz/centos   #启动docker04容器 --volumes-from 进行挂载 继承docker03
[root@2119f4f23a92 /]# cd dataVolumeContainer2
[root@2119f4f23a92 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:32 docker03-update.txt
-rw-r--r-- 1 root root 0 May 11 13:24 docker03.txt

# 查看当前运行的容器
[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--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:32 docker03-update.txt
-rw-r--r-- 1 root root 0 May 11 13:24 docker03.txt

多个mysql实现数据共享

#之前已经安装了mysql
#没有安装:
拉取镜像:docker pull mysql:5.7

#启动
启动 mysql01 可以只写卷,不要主机路径
[root@zheng home]# docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

启动 mysql02 可以不需要目录,挂载的name是相同的
[root@zheng home]# docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7  
#继承 mysql01 通过mysql:5.7镜像启动

#此时实现了两个容器数据同步

得出结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用它为止。只要持久到本机上,存储在本机的文件则会一直保留!

posted @ 2022-04-05 13:05  郑琰  阅读(136)  评论(0编辑  收藏  举报
#

# #