Docker容器数据卷

是什么

docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了,为了能够保存数据,在docker容器中使用卷。卷就是目录或者文件,存在于一个或者多个容器中,但是不属于联合文件系统,因此能够绕过Union File System提供一些用于持久化数据或共享数据的特点

能干嘛?

卷的设计目的就是数据的持久化,完全独立与容器的生命周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
   1. 数据卷可以在容器之间共享和重用数据。
   2. 卷的更改可以直接生效。
   3. 数据卷的更改不会包含在镜像的更新中。
   4. 数据卷的生命周期一直持续到没有容器使用它为止。
容器的持久化
容器间继承+共享数据

数据卷
容器内添加

 1.直接命令添加:
  命令
   docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名


左边为主机,右边为容器

   查看数据卷是否挂载成功。
    使用docker imspect 容器ID,返回的json串有这么一串数据说明挂载成功。


使用命令

Docker容器数据卷_第1张图片
绑定成功

 容器和宿主机之间通信
Docker容器数据卷_第2张图片
相互读写

容器关闭后在宿主机更改文件,容器再次启动数据仍然同步
关闭容器

宿主机新增文件

Docker容器数据卷_第3张图片
容器内任然有数据

命令(带权限)
  docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名  (read only)
  此时主机能对数据卷进行更改,但是容器不能对其更改,只允许读。

DockerFile

hello.java ---- hello.class
hello images ---- images DockerFile
实际就是镜像的描述。

2.DockerFile添加

  • 根目录下新建mydocker文件夹并进入。

  • 在DockerFile中使用VOLUME指令给镜像添加一个或者多个数据卷
    VOLUME["/dataVolumeContainer","dataVolumeContainer2","dataVolumeContainer3"]
      出于可移植和分享的考虑,用-v命令这种方法不能够直在DockerFile中实现,由于宿主机目录是依赖于特定宿主机的,并不能保证所有的宿主机都存在这样的特定目录。

  • File构建


    编写DockerFile文件
  • build后生成镜像-----获得新的镜像


    Docker容器数据卷_第4张图片
    构建镜像

    也是一层一层的叠加,联合文件系统

  • run容器


    Docker容器数据卷_第5张图片
    运行容器

    可以看到已经创建两个数据卷,对应主机路径


    主机对应的数据卷

Docker 挂载主机目录Docker出项cannot open directory .:Permission denied
解决办法:在挂载目录后面 多加一个--privileged=true参数即可
docker run -it -v /mydatavolume:/datavolumecontainer --privileged=true 镜像名

数据卷容器

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

  • 以上一步新建的镜像为模板运行容器dc01/dc02/dc03
    他们已经具有容器卷/datavolumecontainer1和/datavolumecontainer2
  • 容器间传递共享(--volumes-from)

      启动父容器dc01--在datavolumecontainer2中新增内容
    Docker容器数据卷_第6张图片
    启动父容器并新建内容

      dc01/dc02继承自dc01(--volumes-from)
    Docker容器数据卷_第7张图片
    dc02中有dc01新建的文件

      子容器创建文件父容器查看


    Docker容器数据卷_第8张图片
    子容器新建的会影响父容器

      删除父容器子容器数据保留,
    Docker容器数据卷_第9张图片
    image.png

    容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

你可能感兴趣的:(Docker容器数据卷)