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的形式添加,数据卷容器的概念及容器间继承实现的主要内容,如果未能解决你的问题,请参考以下文章