是什么
- 希望docker部分数据做持久化、
- 容器之间数据共享
为了保存数据,我们使用docker数据卷
卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂在的数据卷。
特点:
- 数据卷可以在容器之间共享或重用数据
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的声明周期一直持续到没有容器使用它为止
实现主机和容器数据共享
–主机文件可以到镜像内
–容器内文件可以到主机
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
- 启动docker dc01
docker run -it --name dc01 ssg/centos
--在dc01 /dataVolumeContainer2文件夹中创建文件
touch dc01.txt
- 启动dc02继承dc01
docker run -it --name dc02 --volumes-from dc01 ssg/centos
-- 在dc02 /dataVolumeContainer2文件夹中创建文件
touch dc02.txt
- 启动dc03继承dc01
docker run -it --name dc03 --volumes-from dc01 ssg/centos
-- 在dc03 /dataVolumeContainer2文件夹中创建文件
touch dc03.txt
- dc01容器中有dc01.txt,dc02.txt,dc03.txt
- dc01容器中有dc02.txt,dc02.txt,dc03.txt
- dc01容器中有dc03.txt,dc02.txt,dc03.txt
[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
推荐阅读
- linux|2022年云原生趋势
- 个人日记|K8s中Pod生命周期和重启策略
- k8s|k8s(六)(配置管理与集群安全机制)
- Go|Docker后端部署详解(Go+Nginx)
- docker|Docker
- 【快速学习】docker构建java项目实践
- Alpine Docker 安装 bash
- docker|docker导入dmp文件到oracle容器
- 阿里云docker开发者平台镜像上传和下载
- 工具|dockers 自定义tomcat