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镜像启动
#此时实现了两个容器数据同步
得出结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用它为止。只要持久到本机上,存储在本机的文件则会一直保留!