(四)Docker数据卷容器

什么是数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
简单来说,就是通过挂载其他容器来获得其他容器所拥有的数据卷。


数据卷容器有什么作用

在Docker容器的实际使用中,经常会遇到容器的数据持久化,容器之间的数据共享等问题,通常我们有两种解决方案:

  1. 数据卷(Data Volumes):就是将容器内数据直接映射到本地主机环境的指定文件目录之中,可以理解为容器挂载一个虚拟数据卷然后映射到一个主机目录中
  2. 数据卷容器(Data Volume Containers):用专门的容器来挂载数据卷,其他容器通过挂载这个父容器来实现数据共享,这个专门挂载数据卷的容器就是数据卷容器

简单的总结就是有一个容器来专门管理数据的持久化和容器之间数据共享。前者常用于单一容器数据持久化,后者常用于多容器之间的数据共享和数据持久化。

容器之间数据卷的配置信息会相互传递,其生命周期一直持续到没有容器使用为止。举个例子,b挂载了a,c挂载了b。那么b就拥有了a的数据卷,这种拥有是永久的,c会拥有a、b、c这三个容器的所拥有的数据卷配置。并且删除某个容器并不会对继承他的子容器存在影响。例如如果删除了b,a、c所拥有的数据卷配置不会变化。

之所以不会发生变化,我们可以查看容器继承前后的容器细节信息;
容器A和容器B由不同的镜像生成。A继承了B。可以看到,A是直接继承了B的容器卷。
在这里插入图片描述

如何创建和使用数据卷容器

1、镜像准备

  1. 使用dockerfile创建一个my-centos-vim镜像,该镜像是没有数据卷
FROM centos:7
MAINTAINER yyyL<yyyL@163.com>

ENV MYPATH /tmp/yyyL
WORKDIR $MYPATH

RUN yum -y install vim
RUN mkdir -p $MYPATH

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
  1. 使用dockerfile创建一个my-centos-volume镜像,该镜像的容器作为数据卷容器,包含两个数据卷["/dataVolumeContainer1","/dataVolumeContainer2"]
    ,该镜像是有数据卷
FROM centos:7
MAINTAINER yyyL<yyyL@163.com>

ENV MYPATH /tmp/yyyL
WORKDIR $MYPATH

RUN yum -y install vim
RUN mkdir -p $MYPATH

VOLUME ["/tmp/dataVolumeContainer1","/tmp/dataVolumeContainer2"]
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

在这里插入图片描述

2、创建容器

  1. 先使用my-centos-volumej镜像创建数据卷容器。

    命令docker run -it --name="my-centos-volume" my-centos-volume:latest
    在这里插入图片描述

  2. 再使用没有数据卷的镜像以第一步创建的数据卷容器作为父容器,创建两个容器 vim-1、vim-2。
    挂载方式:在使用run命令启动容器时,通过--volumes-from 容器名称 来挂载其他容器

    命令docker run -it --name="vim-1 or vim-2" --volumes-from my-centos-volume my-centos-vim:latest

    挂载结果:vim-1、vim-2都以my-centos-volume作为父容器分别和my-centos-volume做挂载。
    在这里插入图片描述
    通过docker inspect 容器id命令查看vim-1、vim-2的Mounts节点数据,发现是和my-centos-volume容器的Mounts节点数据是一样的。并且vim-1、vim-2的容器内部也存在["/tmp/dataVolumeContainer1","/tmp/dataVolumeContainer2"]目录。
    在这里插入图片描述


3、测试

1、显然,在my-centos-volume容器绑定的宿主机目录下进行操作,在my-centos-volume容器里是可以看到的,那在vim-1、vim-2中是否也可以看得到呢?
通过tail -F data.txt命令在容器的实时打印/tmp/dataVolumeContainer1/data.txt的内容:
在这里插入图片描述
再在宿主机的绑定目录上创建data.txt文件,并写入内容,可以看到。3个容器均有打印。
在这里插入图片描述

2、停止my-centos-volume容器,查看vim-1、vim-2中的data.txt是否存在?再修改宿主机里的内容,vim-1、vim-2中的data.txt是否会同步修改呢?
当我们停掉了my-centos-volume后,再在宿主机中修改data.txt。vim-1、vim-2中的data.txt还是会同步修改。
在这里插入图片描述
3、如果my-centos-volume中有一个数据卷A,vim-1有一个数据卷B、vim-2中有一个数据卷C。还是依照上面的父子容器的关系,即vim-1和vim-2都将my-centos-volume作为父容器,那么这3个容器的最终的数据卷是什么样子?
my-centos-volume-a、b、c 这3个镜像分别有各有一个dataVolumeContainer-A、B、C的数据卷,my-centos-volume-b、c都将my-centos-volume-a作为父容器。

FROM centos:7
RUN yum -y install vim
VOLUME ["/tmp/dataVolumeContainer-A"]
CMD /bin/bash

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值