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能否共享

可以共享

[root@localhost mydocker]# docker attach dc02
[root@e75626940cfe dataVolumeContainer2]# ls
dc01.txt  dc02.txt  dc03.txt
[root@e75626940cfe dataVolumeContainer2]# touch dc04.txt

[root@localhost mydocker]# docker attach dc03
[root@c6d86f506f42 dataVolumeContainer2]# ls
dc01.txt  dc02.txt  dc03.txt  dc04.txt

你可能感兴趣的:(docker,数据卷,Dockerfile)