docker--容器数据持久化(容器卷)
一、容器启动时将数据持久化到宿主机上,实现容器与容器或者容器与宿主机之间数据共享
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
例如:docker run -it -v /myDataVolume:/myContainerVolume centos # 主机和容器的数据双向绑定
结果:
结果验证:
1.使用docker inspect 容器id可以查看到宿主机的myDataVolume和容器的dataVolumeContainer数据卷绑定了,权限为”RW”,如下图
2.在宿主机上的myDataVolume目录进行数据操作,发现容器上的数据也跟着进行了变化
3.关闭容器,然后在宿主机的/myDataVolume目录下新建host02文件,然后重启容器依然可以看到容器上同步了host02文件
二、容器数据持久化到宿主机(带有权限),只允许宿主机单向改动
例如:docker run -it -v /myDataVolume:/dataVolumeContainer:ro --name mycentos centos:latest
加了ro后缀后,只能编辑宿主机上 myDataVolume目录下的文件,容器上dataVolumeContainer目录下的文件不允许操作
三、使用DockerFile实现容器上的数据持久化到宿主机
通过DockerFile中的VOLUME指令自定义一个带有两个容器卷的镜像
例如:
# 容器卷的持久化脚本 FROM centos VOLUME ["dataVolumeContainer1","dataVolumeContainer2"] CMD echo "finished,-------success" CMD /bin/bash
docker build -f Dockerfile01 -t hubusugar/centos:1.2 .
注意:末尾还有个.号
-f 指定文件的路径
-t 指定镜像名称和tag
然后通过docker run 命令运行生成的容器时候就可以启动一个带有两个数据卷dataVolumeContainer1和dataVolumeContainer2的容器
结果验证:
对应的宿主机的目录为:
/var/lib/docker/volumes/e689fe7556f454e1cbf1e055410bcc796c98cf2955ea7a8d44e226a293c9caf8/_data