什么是容器数据卷
这要从docker的理念开始讲起 。docker是将应用和运行的环境打包成容器运行,有时在容器运行时产生的文件是我们需要的,但是随着容器的关闭这些文件会消失。我们将文件持久化。还有另外的一种需求,我们希望容器之间可以共享数据 。为了数据能够保存,我们使用卷。
容器卷能够做什么
容器数据的持久化
容器之间继承和共享数据
添加数据卷的方式
一般我们有两种方式来添加容器卷
(1)直接使用命令来进行添加
语法
docker run -it -v /宿主机目录:/容器内目录 镜像名 /bin/bash
示例
查看容器卷是否挂载成功。
docker inspect 容器ID
输入上述命令后,会出现一串json数据串。其中我们可以找到“Mounts"可以看到挂载的节点
查看容器和数组机之间的数据共享
在宿主机的mycentos01中创建hello.txt文件。进入容器查看centos01里面是否有hello.txt文件。
在数组机中创建文件,则容器所对应的位置会有相应的文件生成。
(2)使用DockerFile添加
在宿主机的根目录下创建mydocker文件夹并在此文件夹下touch一个名称问DockerFile的文件
编写DockerFile
FROM centos
VOLUME ["/dataContainer1","/dataContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
build成一个新的镜像
docker build -f /docker/DockerFile -t 命名空间/镜像名 . #最后的点不要忘记
示例
启动容器
docker run -it --name='mycentos' REPOSITORY(或者是镜像ID)
示例
此时在宿主机上输入下列命令,会出现两个容器卷
docker inspect 容器ID
我们今后使用和共享数据的地址为挂载的地址。
什么是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容器间的数据传递共享。