Docker存储
-
docker镜像有多个只读层叠加而成,启动容器时,docker会加载只读镜像层栈顶部添加一个读写层
-
如果运行的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制
-
关闭并重启容器,其数据不受影响,但删除docker容器,则其更改将会全部丢失
-
存在的问题
- 存储于联合文件系统中,不易于宿主机访问
- 容器间数据共享不便
- 删除容器其数据会丢失
-
解决方案:劵(volume)是容器上的一个或多个目录,此类目录可绕过联合文件系统与宿主机上的某目录绑定(关联)
Docker有两种类型的劵,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同
-
bind mount volume:本地挂载劵
docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox
docker inspect -f {{.Mounts}} bbox2
-
Docker-managed volume:docker管理的劵
docker run -it -name bbox1 -v VOLUMEDIR busybox
docker inspect -f {{.Mounts}} bbox1
可以在启动容器的时候去复制其他容器的存储卷属性和网络属性
-
多个容器的劵使用同一个主机目录,
docker container run -it --name c1 -v /docker/volumes/v1:/data busybox
-
docker container run -it --name c2 -v /docker/volumes/v1:/data busybox
-
复制使用其他容器的劵,为docker run 命令使用--vcolumes-from选项
docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox
docker run -it --name bbox1 --volumes-from bbox1 busybox
-
复制使用其他容器的网络属性
docker run -it --name bbox1 busybox
docker run -it --name bbox2 --network container:bbox1 busybox