Docker 容器数据卷

1.docker容器数据卷是什么

docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据。

2.docker容器数据卷能干嘛?

容器的持久化 容器间的继承+数据共享

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

3.容器数据卷的添加

Docker 容器数据卷的添加有两种方法,一种是直接命令添加,另外一种是通过DockerFile添加。

1.直接命令添加

命令:docker run -it -v 宿主机地址:容器地址 容器名称/ docker run -it -v 宿主机地址:容器地址 ro 容器名称

添加ro时容器地址中的文件只读

docker run -it -v /dataVolumeContainer:/mydataVolume  centos

查看是否挂载成功docker inspect 容器id

在这里插入图片描述
挂载详情
在这里插入图片描述在这里插入图片描述

数据共享测试

挂载成功后在根目录可以看到挂载的目录
在这里插入图片描述

  • 进入该目录并编写文件vim main.txt
edit by main computer
  • 进入容器可以看到容器中对应文件mydataVolume
    在这里插入图片描述
    进入mydataVolume你会发现mydataVolume中有main.txt文件并且内容相同,即mydataVolume与dataVolumeContainer中文件是共享的,你修改其中一个另外一个也会跟着变化。
    在这里插入图片描述

2.DockerFile添加

通过DockerFile添加数据卷主要是通过VOLUME命令。
说明:
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

1.在根目录新建mydocker文件夹并进入
2.编写DockerFile文件
  • vim dockerfile
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
3.build生成镜像
  • 命令docker build -f /mydocker/dockerfile -t dpf/centos2 .:-f表示file -t表示命名空间 .表示当前目录
    在这里插入图片描述
  • 这时候可以在本地镜像中看到你build生成的新镜像
    在这里插入图片描述
4.run容器
  • 命令:docker run -it 镜像id /bin/bash
    启动之后可以看到对应容器中的数据卷
    在这里插入图片描述
  • 查找宿主机对应数据卷位置docker inspect 容器id
    在这里插入图片描述

4.数据卷容器

1.是什么?

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

2.数据卷容器实现荣期间的传递共享

以之前用DockerFile构建的dpf/centos镜像为模板并运行容器dc01、dc02、dc03。dpf/centos镜像中已经具有容器卷/dataVolumeContainer1、/dataVolumeContainer2。
主要通过--volumes-from命令实现。

启动一个父容器dc01,并在dataVolumeContainer2中添加内容
  • docker run -it --name dc01 dpf/centos
  • 进入dataVolumeContainer2执行命令touch container1.txt
    在这里插入图片描述
启动dc02、dc03继承自dc01,并各自在dataVolumeContainer2中添加内容
  • docker run -it --name dc02 --volumes-from dc01 dpf/centos
  • 进入dataVolumeContainer2执行命令touch container2.txt
  • docker run -it --name dc03 --volumes-from dc01 dpf/centos
  • 进入dataVolumeContainer2执行命令 touch container3.txt
    在这里插入图片描述
    当你修改dc01中dataVolumeContainer2中的文件,dc02、dc03中dataVolumeContainer2中的文件同样会改变,即相当于三个容器的dataVolumeContainer2文件是共享的。当停止dc01后,dc02、dc03同样还可以进行数据共享。这时候一个数据卷容器间的共享窗体就形成了。
posted @ 2020-02-04 22:03  麦田的老哥  阅读(13)  评论(0)    收藏  举报