第二节:数据卷简介和配置数据卷及数据卷容器
一. 数据卷概念及作用
1. 背景
(1). Docker 容器删除后,在容器中产生的数据也会随之销毁,如何保持容器中的数据呢?
(2). Docker 容器和外部机器可以直接交换文件吗?
(3). 容器之间想要进行数据交互?
2. 概念
(1). 数据卷是宿主机(linux主机)中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。
PS:说白了,就是把容器中的一个目录和Linux主机中第一个目录绑定起来,然后再任何一方修改,另外一方可以同步。
绑定后,可以不需要进入容器内部,就可以查看所需要的容器中的数据。
(2). 一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。
3. 作用
(1). 容器数据持久化
(2). 外部机器和容器间接通信
(3). 容器之间数据交换
二. 配置数据卷
1. 目的
解决容器数据的持久化;
实现容器和外部机器间的通信。
2. 指令
【docker run .... -v 宿主机目录:容器目录 .......】
注: 目录必须是绝对路径,路径如果不存在会自动创建,可以同时挂载多个目录。
(也可以省略宿主机目录,宿主机目录会自行分配一个目录: 【docker run .... -v 容器目录....】 不推荐!)
挂载单个目录的指令:
docker run -id --name=xxx -v /xxx/xx:/xx/xxxx <imageName>
挂载多个目录的指令: \代表换行
docker run -id --name=xxx\ -v /xxxx1:/xxxxx1 \ -v /xxxx2:/xxxxx2 \ -v /xxxx3:/xxxxx3 \
<imageName>
3. 案例
(1). 新建一个mycentos1容器,将容器内工作目录下的mycontainerdata1 和 Linux宿主机工作目录下的mydata1进行挂载,查看数据同步情况。
A. 运行指令:
[ docker run -id --name=mycentos1 -v /root/mydata1:/root/mycontainerdata1 centos ]
B. 在宿主机目录上新建一个文件夹,然后去容器中查看,同样存在。
C. 查看容器情况:
运行【docker inspect mycentos1】 。
D. 将该容器删除,重新运行[ docker run -id --name=mycentos1 -v /root/mydata1:/root/mycontainerdata1 centos ]
发现之前的 1.txt文件还在,容器内的数据又恢复了。
(2). 新建一个mycentos1容器,将容器内工作目录下的mycontainerdata与宿主机的目录进行绑定。
A. 运行指令
【docker run -id --name=mycentos1 -v /root/mycontainerdata centos】
B. 查看容器匹配的宿主机目录
(3). 新建一个mycentos2容器,将容器内工作目录下的mycontainerdata1、mycontainerdata2、mycontainerdata2 分别和Linux宿主机工作目录下的mydata1、mydata2、mydata3进行挂载。
运行指令:\代表换行
docker run -id --name=mycentos2 \ -v /root/mydata1:/root/mycontainerdata1 \ -v /root/mydata2:/root/mycontainerdata2 \ -v /root/mydata3:/root/mycontainerdata3 \ centos
查看容器情况:
三. 配置数据卷容器
1. 如何实现多个容器间的数据交互?
方案1:
创建每个容器的时候都与宿主机指定相同的挂在目录即可。(相对麻烦,每创建一个容器,都要指定相互绑定的路径)
方案2:(推荐!!!)
先创建一个数据卷容器(即这个容器和宿主机进行目录的绑定),后面新建的容器创建的时候都 ‘继承’ 这个容器,这样就可以实现了所有容器的: 容器内目录和宿主机目录绑定关系是相同。
2. 指令
(1). 先创建1个数据卷容器
docker run -id --name=c1 -v /xxx/xx:/xx/xxxx <imageName>
(2). 后面的容器都继承这个数据卷容器 (关键字:--volumes-from)
docker run -id --name=c2 --volumes-from c1 <imageName> docker run -id --name=c3 --volumes-from c1 <imageName> docker run -id --name=c4 --volumes-from c1 <imageName>
3.案例
新建4个容器,分别是c1、c2、c3、c4,四个容器间可以实现数据共享。
(1). 运行指令:
【docker run -id --name=c1 -v /root/mydata:/root/mycontainerdata centos】
【docker run -id --name=c2 --volumes-from c1 centos】
【docker run -id --name=c3 --volumes-from c1 centos】
【docker run -id --name=c4 --volumes-from c1 centos】
(2). 在宿主机中创建一个文件,然后随机进入一个容器查看,比如进入c3容器。
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。