docker|docker 数据卷

是什么

  1. 希望docker部分数据做持久化、
  2. 容器之间数据共享
    为了保存数据,我们使用docker数据卷
能干嘛
卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂在的数据卷。
特点:
  1. 数据卷可以在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的声明周期一直持续到没有容器使用它为止
容器卷操作
实现主机和容器数据共享
–主机文件可以到镜像内
–容器内文件可以到主机
docker run -it -v /宿主机绝对目录:/容器内目录 镜像名docker run -it -v /宿主机绝对目录:/容器内目录:ro 镜像名 --只读权限 -- 容器内目录为只读权限 不可以修改 docker inspect --以json格式查看docker信息

docker 关闭后重新启动,主机和容器之间数据依然共享
docker file
镜像描述文件
使用volume指令给镜像添加一个或多个数据卷
# volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished, ---------- success" CMD /bin/bash 等于 docker run -it -v /host1:/dataVolumeContainer1 -v /host1:/dataVolumeContainer2 centos /bin/bash

使用build编译生成镜像
docker build -f Dockerfile目录 -t 镜像名 . -- `.`是当前目录docker build -f /root/mydocker/Dockerfile -t ssg/centos . --生成名称为ssg/centos的镜像docker run -it ssg/centos --运行镜像 ,容器内存在"/dataVolumeContainer1","/dataVolumeContainer2"目录

使用docker inspect 87d84efd01d2 查看相关信息
"Mounts": [ { "Type": "volume", "Source": "/var/lib/docker/volumes/9d1df375fdd8ac9799ca15e780fd8e975c49f19e0181b90fbe5193e8e9c0bf35/_data", "Destination": "/dataVolumeContainer2",}, { "Type": "volume", "Source": "/var/lib/docker/volumes/f05dd105e8c2aa8ab359039e3b0b09cbacbff29fc630c2a269e21f94cbaff2ae/_data", "Destination": "/dataVolumeContainer1",} ], "Config": { "Volumes": { "/dataVolumeContainer1": {}, "/dataVolumeContainer2": {} }, },

数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据源共享,挂在数据卷的容器,称为数据卷容器
ssg/centos 镜像运行容器 dc01,dc02,dc03 那么他们已经有了容器数据卷dataVolumeContainer1,dataVolumeContainer2
  1. 启动docker dc01
docker run -it --name dc01 ssg/centos --在dc01 /dataVolumeContainer2文件夹中创建文件 touch dc01.txt

  1. 启动dc02继承dc01
docker run -it --name dc02 --volumes-from dc01 ssg/centos -- 在dc02 /dataVolumeContainer2文件夹中创建文件 touch dc02.txt

  1. 启动dc03继承dc01
docker run -it --name dc03 --volumes-from dc01 ssg/centos -- 在dc03 /dataVolumeContainer2文件夹中创建文件 touch dc03.txt

  1. dc01容器中有dc01.txt,dc02.txt,dc03.txt
  2. dc01容器中有dc02.txt,dc02.txt,dc03.txt
  3. dc01容器中有dc03.txt,dc02.txt,dc03.txt
删除dc01,dc02和dc03能否共享 【docker|docker 数据卷】可以共享
[root@localhost mydocker]# docker attach dc02 [root@e75626940cfe dataVolumeContainer2]# ls dc01.txtdc02.txtdc03.txt [root@e75626940cfe dataVolumeContainer2]# touch dc04.txt[root@localhost mydocker]# docker attach dc03 [root@c6d86f506f42 dataVolumeContainer2]# ls dc01.txtdc02.txtdc03.txtdc04.txt

    推荐阅读