概述
Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本隐藏,此即“写时复制(COW)”机制。
关闭并重启容器,其数据不受影响;但删除Docker容器,其更改将会全部丢失。
卷:是容器上的一个或多个目录,此类目录可与宿主机的目录绑定关联。
Docker卷
Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同。
-
Bind mount volume 绑定挂载卷:用户指定在宿主机和docker容器内的目录绑定
docker run --name b2 -it --rm -v /var/lib/docker/volumes/b2:/data busybox #docker绑定挂载卷,如果要挂载多个卷,则写多个-v 宿主机目录:docker容器目录
docker inspect -f {{.Mounts}} b2 #查看指定信息,外面一层大括号是为格式,里面大括号表示一个json
-
Docker-managed volume docker管理卷:docker自动管理与宿主机目录的绑定,不管在容器内目录还是宿主机目录新建文件,双方都共享。
docker run -it -name b2 -v /data busybox #将容器内/data目录挂载在宿主机
docker inspect b2 #查看docker容器信息
-
共享卷:复制容器的卷设置
先开启一个容器,并指定绑定卷
docker run --name b2 -it -v /var/lib/docker/volumes/b2:/data busybox
再开启第二个容器,复制b2的卷设置
docker run --name b1 -it --volumes-from b2 busybox #--volumes-from 后面直接跟容器名
形成宿主机与容器b1、b2之间的卷目录内容互通
当一个容器添加多个卷时, -v 写多个