卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂在的数据卷。
特点:
实现主机和容器数据共享
–主机文件可以到镜像内
–容器内文件可以到主机
docker run -it -v /宿主机绝对目录:/容器内目录 镜像名
docker run -it -v /宿主机绝对目录:/容器内目录:ro 镜像名 --只读权限
-- 容器内目录为只读权限 不可以修改
docker inspect --以json格式查看docker信息
docker 关闭后重新启动,主机和容器之间数据依然共享
镜像描述文件
使用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
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
docker run -it --name dc01 ssg/centos
--在dc01 /dataVolumeContainer2文件夹中创建文件
touch dc01.txt
docker run -it --name dc02 --volumes-from dc01 ssg/centos
-- 在dc02 /dataVolumeContainer2文件夹中创建文件
touch dc02.txt
docker run -it --name dc03 --volumes-from dc01 ssg/centos
-- 在dc03 /dataVolumeContainer2文件夹中创建文件
touch dc03.txt
可以共享
[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