Docker:第三章:Docker的数据卷和数据卷容器
一、数据卷
1 、什么是数据卷
1.1 、需要解决的问题
出于效率等一系列原因,docker 容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:
当容器删除时,容器中产生的数据将丢失 :
例如,MySQL 容器损坏无法启动,需要删除容器重新创建,那么数据库数据将会丢失
无法在多个容器之间共享数据
例如,Tomcat 集群部署成功后,无法共享程序文件
1.2 、数据卷的概念
为了解决以上的问题,docker 引入了数据卷(volume) 机制。
数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中。
当容器删除时,容器中的数据可以被持久化:
在多个容器之间共享数据:
数据卷的最大特点是:其生存周期独立于容器的生存周期。浅红色文字:使用数据卷可以在多个容器之间共享数据。
2 、配置数据卷目录
2.1 、挂载数据卷
将宿主机根目录中的 dataVolumeHost 挂载到容器根目录中的 dataVolumeContainer
docker run -it -v /dataVolumeHost:/dataVolumeContainer --name centos2 centos:7
OPTIONS 说明
2.2 、查看数据卷是否挂载成功
此时可以分别查看宿主机和容器的根目录,发现分别生成了数据卷目录
执行命令 docker inspect可以查看数据卷已挂载
docker inspect centos2
2.3 、数据共享
首先进入容器,在容器的数据卷挂载目录中创建文件并写入内容然后退出容器,查看宿主机挂载目录,可以看到同步更新的文件
2.4 、数据的同步
首先停止容器
然后在宿主机修改共享数据
接下来启动前面的容器,查看共享数据文件,发现数据在容器中同步
2.5 、数据的持久化
首先删除容器
然后在宿主机修改共享数据
接着重新创建容器并挂载数据卷
发现数据在容器中恢复
2.6 、一个容器挂载多个数据卷
2.7 、两个容器挂载同一个数据卷
docker run -it -v /dataVolumeHost:/dataVolumeContainer4 --name centos4 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer5 --name centos5 centos:7
二、数据卷容器
1、什么是数据卷容器
1.1 、多容器数据交换的方式
多个容器挂载宿主机上的同一个数据卷目录
多个容器挂载宿主机上的同一个数据卷容器
1.2 、数据卷容器的概念
数据卷容器也是一个容器,但是这个容器的作用是专门提供数据卷供其他容器挂载,其它容器通过挂载这个数据卷容器实现数据共享。
2 、配置数据卷容器
2.1 、创建数据卷容器
当 -v 参数后面只有一个目录的时候,表示只设置容器中的数据卷目录,而宿主机中的数据卷目录会被自动分配
docker run -it -v /volume --name c1 centos:7
容器创建成功后,可以查看数据卷目录的分配情况
docker inspect c1
2.2 、挂载数据卷容器
docker run -it --volumes-from c1 --name c2 centos:7
docker run -it --volumes-from c1 --name c3 centos:7
OPTIONS 说明
–volumes-from:将当前容器挂载到指定的数据卷容器上
容器创建成功后,可以查看 c1 和 c2 的数据卷目录的分配情况,发现和 c1 使用的是同一个宿主机的文件目录
docker inspect c2
docker inspect c3
2.3 、测试数据共享vi
/var/lib/docker/volumes/06e480611281a60059aeb574dc2b455645 d896858d7c7a849c65cf2113a35df3/_data/data.txt
docker exec -it c2 cat /volume/data.txt
docker exec -it c3 cat /volume/data.txt