第二节:数据卷简介和配置数据卷及数据卷容器

一. 数据卷概念及作用

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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
原文地址:https://www.cnblogs.com/yaopengfei/p/13619665.html