什么是容器数据卷

这要从docker的理念开始讲起 。docker是将应用和运行的环境打包成容器运行,有时在容器运行时产生的文件是我们需要的,但是随着容器的关闭这些文件会消失。我们将文件持久化。还有另外的一种需求,我们希望容器之间可以共享数据 。为了数据能够保存,我们使用卷。

容器卷能够做什么

容器数据的持久化

容器之间继承和共享数据

添加数据卷的方式

一般我们有两种方式来添加容器卷

(1)直接使用命令来进行添加

语法

docker run -it -v /宿主机目录:/容器内目录 镜像名 /bin/bash

示例

1570809893085

查看容器卷是否挂载成功。

docker inspect 容器ID

输入上述命令后,会出现一串json数据串。其中我们可以找到“Mounts"可以看到挂载的节点

1570810173521

查看容器和数组机之间的数据共享

在宿主机的mycentos01中创建hello.txt文件。进入容器查看centos01里面是否有hello.txt文件。

1570810392565

1570810576859

在数组机中创建文件,则容器所对应的位置会有相应的文件生成。

(2)使用DockerFile添加

在宿主机的根目录下创建mydocker文件夹并在此文件夹下touch一个名称问DockerFile的文件

1570811264716

编写DockerFile

FROM centos
VOLUME ["/dataContainer1","/dataContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

1570811405087

build成一个新的镜像

docker build -f  /docker/DockerFile -t  命名空间/镜像名  . #最后的点不要忘记

示例

1570811629828

启动容器

docker run -it --name='mycentos' REPOSITORY(或者是镜像ID)

示例

1570811959309

此时在宿主机上输入下列命令,会出现两个容器卷

docker inspect 容器ID

1570812269358

我们今后使用和共享数据的地址为挂载的地址。

什么是docker数据卷容器

上面介绍了docker容器数据卷,它的作用相当于生活中的活动硬盘,那么数据卷容器就相当于把多个活动硬盘再挂载到一个活动硬盘上,实现数据的传递依赖。

docker run -it - -name parent  镜像名(可以填上面通过dockerFile建立的镜像,里面有挂载容器卷)

然后建立两个子容器继承父容器

docker run -it - -name son1 --volumes -from parentContainer 镜像名
docker run -it - -name son2 --volumes -from parent 镜像名

假设我们DockerFile里面定义的容器卷目录为dockerVolume,父容器里面有dockerVolume目录,子容器继承了父容器的dockerVolume,在字容器中的dockerVolume目录作出的修改会同步到父容器的dockerVolume目录上,达到了继承和数据共享的目的。

官网上有一句话描述的是,容器之间配置信息的传递,数据卷的生命周期会一致持续到没有容器使用它为止,换言之,只要有一个容器仍在使用该数据卷,该数据卷一直都可以进行数据共享,通俗地来说,如果此时我们把父容器关闭掉,两个字容器之间依旧可以进行数据共享,而且通过继承子容器生成的新容器,一样可以与子容器进行数据共享。这就是docker容器间的数据传递共享。