目录
什么是容器数据卷
将宿主机的目录和容器的目录进行绑定,对容器运行中产生的数据的进行持久化,类似于redis的rdb和aof文件
容器数据卷能干什么
对容器数据的持久化 容器间数据共享和继承
添加容器数据卷的两种方式
1、使用命令直接添加
使用run命令的-v参数将宿主机的目录和容器的目录进行绑定
1.1 命令
格式:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名:镜像版本
或者 docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名:镜像版本
ro
代表read only
设置之后,在容器内,对于数据卷,只有读的权限
1.2 查看是否绑定成功
通过命令查看容器的内部细节:docker inspect 容器id
2、使用DockerFile添加
方式:可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
2.1 创建dockerfile文件
创建文件dockerfile-volume_test
,内容如下
FROM centos:7
RUN yum -y install vim
VOLUME ["/tmp/dataVolumeContainer1","/tmp/dataVolumeContainer2"]
CMD echo "finished--------success"
CMD /bin/bash
2.2 使用dockerfile文件结合build命令创建镜像
docker build -f ./dockerfile-volume_test -t my-centos .
最后有一个点,表示当前文件所处的上下文环境的目录
2.3 启动容器,使用 docker inspect 容器id 查看容器内部细节
发现,VOLUME 中配置的两个地址,会分别和宿主机上的 /var/lib/docker/volumes/一长串字符串/_data
做绑定
容器数据卷数据共享测试
1、容器停止后,修改宿主机的文件,重启容器,是否会同步?
会同步
2、容器停止后,删除宿主机绑定目录,重启容器,是怎样的效果?
宿主机的绑定目录会重新创建,容器的绑定目录会清空
3、容器里看到的文件和宿主机看到的文件是否是同一份?
是的,可以在宿主机和容器内分别查看文件的唯一id。就可以发现这个共享的是同一份文件