docker 容器的数据卷
什么是数据卷(DataVolume)
数据卷是经过特殊计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
docker数据卷是独立于容器,存在于宿主机Host里。数据卷可以是目录,也可以是文件。数据卷可以实现多个容器的数据共享和交换。
数据卷(DataVolume)的特点
- 数据卷在容器启动时初始化,如果容器使用的铺像在挂载点包含了数据,这些 数据会拷贝到新初始化的数据卷中。
- 数据卷可以在容器之间共享和重用
- 可以对数据卷里的内容直接进行修改
- 数据卷的变化不会影响像的更新
- 卷会一直存在,即使挂载数据卷的容器已经被删除
为容器添加数据卷
sudo docker run -v ~/containerdata:/data -it ubuntu/bin/bash
为数据卷添加访问权限
$dockerrun -v ~/datavolume:/data:ro -it ubuntu/bin/bash
只读
使用Dockerfile构建包含数据卷的镜像
DockerfiIe指令:VOLUME["/data"]
创建的目录不能映射已存在的本地文件目录中,运行同样镜像所建的数据卷也是不同的。本地目录由docker自动创建。
docker 的数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。
挂载数据卷容器的方法:
docker run --volumes-from [CONTAINERNAME]
简化inspect返回信息,只查看volume信息:
docker inspect --format="{ {.volumes}}" CONTAINER-NAME
即使删除了数据卷容器,挂载这个数据卷容器的容器仍然可以访问数据卷挂载目录,即数据卷容器只是一个配置信息的传递
docker rm -v CONTAINER_NAME
连同volume一起删除(依旧可以访问,实质是指向本地目录)
docker 数据卷的备份和还原
数据备份方法
docker run --volumes-from [container name] -v $(pwd):/backup ubuntu
tar cvf /backup/backup.tar [container data volume]
数据换原方法
docker run --volumes-from [container name] -v$(pwd):/backup ubuntu
tar xvf /backup/backup.tar [container data volume]