Docker-数据卷以直接命令和Dockerfile的形式添加,数据卷容器的概念及容器间继承实现

Posted hydd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-数据卷以直接命令和Dockerfile的形式添加,数据卷容器的概念及容器间继承实现相关的知识,希望对你有一定的参考价值。

  

  本文主要讲解数据卷的直接命令和dockerfile的两种添加方式,并对主机和容器之间数据是否能共享进行验证;以及通过数据卷容器,使其他容器通过挂载父容器实现数据共享,并验证父容器删除后其他容器是否仍能进行数据共享。

 

数据卷添加

  容器数据卷在容器关闭后仍能将Docker运行产生的数据(如运算结果或日志信息)保存,可以将容器数据卷形象的想象成U盘,它的使容器与主机间、容器间的数据共享成为可能。

一、直接命令添加

1.在添加前,主机里没有/myDataVolume,容器里没有/dataVolumeContainer目录,在添加后有了

docker run -it -v /myDataVolume:/dataVolumeContainer centos

技术图片

 技术图片

 

2.查看数据卷是否挂载成功

使用docker inspect来查看容器相关信息:docker inspect 86a6ba6a5956,可以看到挂载的目录

技术图片

技术图片

 

3.容器和主机之间数据共享

在主机内新建一个host.txt的文件,在容器中写入数据到host.txt,在主机内可以看到该内容

技术图片

 技术图片

 技术图片

 

 在容器内新建一个container.txt文件,在主机上也能看到

技术图片

 技术图片

 

4.容器停止退出后,主机修改后数据是否同步

容器退出

技术图片

 

 在主机上新建host02.txt,在host.txt文件中新增文字

技术图片

 

启动并进入容器中,查看在主机上的更改是否在容器内同步

技术图片

技术图片

 在容器停止退出后,主机修改后的数据仍然同步到容器上了

技术图片

 技术图片

 

5.带权限的容器卷

将容器内的目录只读权限

docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos

技术图片

 

 在主机内新建host.txt文件,进入容器之后发现文件同步更新了

技术图片

 

 在主机内对文件写入内容,在容器内也能看到更新

技术图片

技术图片

但是容器内,既不能新建一个文件,也不能对之前文件进行修改

技术图片

技术图片

 

注:此时docker inspect该容器,发现“RW”的状态为false

技术图片

 

 

 

二、DockerFile添加

 DockerFile是类似于镜像模板的描述文件

1.根目录下新建mydocker文件夹并进入

技术图片

 技术图片

 

2.新建dockerfile文件,文件内容如下:

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]           //在根目录下新建两个容器卷
CMD echo "finished,-------success1"                          //执行成功的输出
CMD /bin/bash              

注:

(1)文件内容相当于直接命令添加的:docker run -it -v /host1: /dataVolumeContainer1  -v /host2: /dataVolumeContainer2  centos  /bin/bash                                 

(2)dockerfile中每个指令生成一层镜像

 

3.build后生成镜像

使用build命令后,会根据dockerfile文件生成一个新镜像供我们使用

docker build -f /mydocker/dockerfile -t zzyy/centos .

技术图片

 

 使用docker images命令可以看到我们创建的镜像

技术图片

 

4.run容器

docker run -it zzyy/centos

此时可以在容器根目录下看到dockerfile中的两个目录,在dataVolumeContainer1中新建一个文件:container01.txt

技术图片

 技术图片

 

5.主机上对应目录可以通过docker inspect查看其对应路径,发现容器上新建的文件能在主机上发现

技术图片

技术图片

 技术图片

 

6.在主机上新建文件,在容器内也能发现

技术图片

技术图片

 

注:

技术图片

 

 

数据卷容器

一、是什么

  命令的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。可以将这个过程形象的比喻为:A通过移动硬盘在电脑上拷东西,B、C、D的硬盘挂在A的活动硬盘上,从而实现A、B、C、D之间的数据共享。

 

二、总体介绍

1.以上一步新建的镜像zzyy/centos为模板,运行dc01、dc02、dc03三个容器,可以将dc01当做父容器,把dc02、dc03挂载在dc01上

2.它们已经具有容器卷dataVolumeContainer1、dataVolumeContainer2

 

三、容器间传递共享(-Volumes-from)

1.先启动一个父容器dc01,并在dataVolumeContainer2目录下新增文件dc01_add.txt,ctrl+p+q退出

docker run -it --name dc01 zzyy/centos

技术图片

技术图片

 

2.使dc02继承自dc01,并创建新文件dc02_add.txt,ctrl+p+q退出,dc03同理,并新建文件dc03_add.txt

docker run -it --name dc02 --volumes-from dc01 zzyy/centos

技术图片

技术图片

 

3. 此时在dc01中也能看到dc02、dc03新建的文件,这说明继承了后,容器卷即达到了共享也达到了传递数据的目的,父到子、子到父都可以传递

技术图片

 

4.删除dc01,dc02上的文件内容没有受到影响,进入dc02容器,新增文件dc02_update.txt

技术图片

技术图片

 

在父容器被删除的情况下,dc02更新的文件仍能共享给dc03

 技术图片

 

由此得出结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它位置。

 

 

 

 

 

参考文档:尚硅谷Docker教学视频

 

以上是关于Docker-数据卷以直接命令和Dockerfile的形式添加,数据卷容器的概念及容器间继承实现的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 为 Elastic Beanstalk 中的 EC2 实例设置 EBS 根卷以持久保存

Docker-compose容器

Docker-compose容器

Docker-compose容器

docker容器前台或后台运行的方法

docker容器前台或后台运行的方法