Docker容器数据卷

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhengzhaoyang122/article/details/84864755

一、是什么?


Docker的理念:将运用于运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的希望是持久化,同时希望容器之间能够共享数据。Docker产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。Docker为了保存数据就使用了Docker数据卷。

二、作用


卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。
特点:1)、数据卷可以在容器之间共享或重用数据。
    2)、数据卷中的更改可以直接生效。
    3)、数据卷中的更改不会包含在镜像的更新中。
    4)、数据卷的生命周期一直持续到没有容器使用它为止。

三、数据卷(容器内添加)


【1】、直接命令添加
   ●   命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名    (两个文件目录都可以不存在,会自动新建)

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

   ●   查看数据卷是否挂载成功:docker inspect
      
   ●  容器和宿主机之间可以进行数据共享。
   ●  容器停止退出后,主机修改后数据是否同步?容器启动会,会进行同步。
   ●  命令(带只读权限)docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

【2】、DockerFile添加
   ●  根目录下新建mydocker文件夹并进入:mkdir mydocker
   ●  可在Dockerfile中使用VOLUME命令来给镜像中添加一个或多个数据卷(命令的方式只能添加一个,且需要指定主机文件),由于宿主机目录依赖于特定宿主机,我们并不能保证在所有宿主机上都存在这样的特定目录。
   ●  File构建如下:

#创建一个文件dockerfile,内容如下
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finish"
CMD /bin/bash

    ●  build后生成镜像:docker build -f /mydocker/dockerfile -t zzx/centos .
  
   构建完后生成如下镜像文件:
  
    ●  run 我们新生成的镜像,产生新容器:docker run -it zzx/centos
    ●  查看我们定义的容器内的卷目录:
   
    ●  主机对应的默认地址:docker inspect c5a0adf0c5e9

四、数据卷容器


命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,称之为数据卷容器。
案例:1)、先启动一个父容器dc01:docker run -it --name dc01 zzx/centos  修改dataVolumeContainer2中的文件。
    2)、创建dc02和dc03继承dc01:docker run -it --name dc02 --volumes-from dc01 zzx/centos  三个容器间就可共享数据。
    3)、删除dc01与dc02后dc03是否可访问。dc02和dc03中的数据不会影响。数据共享具有传递性。
结论:容器之间配置信息的传递,数据卷的声明周期移植维持到么有容器使用为止。

猜你喜欢

转载自blog.csdn.net/zhengzhaoyang122/article/details/84864755