Docker容器数据卷

一、是什么?


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容器数据卷_第1张图片
   ●  容器和宿主机之间可以进行数据共享。
   ●  容器停止退出后,主机修改后数据是否同步?容器启动会,会进行同步。
   ●  命令(带只读权限)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 .
   Docker容器数据卷_第2张图片

   构建完后生成如下镜像文件
  
    ●  run 我们新生成的镜像,产生新容器:docker run -it zzx/centos
    ●  查看我们定义的容器内的卷目录:
    Docker容器数据卷_第3张图片
    ●  主机对应的默认地址:docker inspect c5a0adf0c5e9
Docker容器数据卷_第4张图片

四、数据卷容器


命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,称之为数据卷容器。
案例: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 中的数据不会影响。数据共享具有传递性。
结论:容器之间配置信息的传递,数据卷的声明周期移植维持到么有容器使用为止。

-----如果喜欢,点个  红心♡  支持以下,谢谢---- 

你可能感兴趣的:(Docker)