卷是持久化由Docker容器生成和使用的数据的首先机制。虽然绑定挂载依赖于主机的目录结构,但卷由Docker彻底管理。与绑定安装相比,卷有几个优势:html
另外,与使容器的可写入层中的数据持久化相比,卷一般是更好的选择,由于使用卷不会增长容器的大小,而且容器的内容存在于给定容器的生命周期以外。docker
Docker-managed volume ~]# docker run -it --name b1 -v /data docker.io/busybox:latest 查看容器b1的卷、卷标识符及挂载的主机目录 ~]# docker inspect -f {{.Config.Volumes}}{{.Mounts}} b1 Bind-mount Volume ~]# docker run -it -v HOSTDIR:VOLUMEDIR --name b2 docker.io/busybox:latest ~]# docker inspect -f {{.Mounts}} b2
多个容器的卷使用同一个主机目录,例如 ~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest ~]# docker run -it --name b2 -v /hostname/html/:/app/www/ docker.io/busybox:latest 复制使用其它容器的卷,为docker run命令使用--volumes-from(复制另外一个容器的卷定义)选项 ~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest ~]# docker run -it --name b2 --volumes-from b1 docker.io/busybox:latest
宿主机 | 容器 | 关联后 |
---|---|---|
/hostname/html/{a,b,c}有a,b,c三个文件 | 为空 | 容器内生成目录和文件。而且无论怎样都是mount |
[root@centos7 ~]# ls /var/lib/docker/volumes/ metadata.db 启动容器并挂载卷,建立文件并退出 [root@centos7 ~]# docker run --name b1 -it -v /app/html/ docker.io/busybox / # cd /app/html/ /app/html # ls /app/html # echo "Hello World!" > index.html /app/html # ls index.html /app/html # exit [root@centos7 ~]# ls /var/lib/docker/volumes/ 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827 metadata.db [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 查看b1这个容器的二级Mounts的详细信息。{{两个花括号表示二级选项 [root@centos7 ~]# docker inspect -f {{.Mounts}} b1 [{volume **765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827** /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data /app/html local true }] 第一个参数:volume卷 第二个参数:卷名,哈希生成 第三个参数:挂载至宿主机的目录 第四个参数:本地卷 第五个参数:我也不清楚,就当成能够正常使用的吧! 查看永久存储,哈希生成的目录名 [root@centos7 ~]# cat /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data/index.html Hello World! [root@centos7 ~]# docker rm b1 b1 显示有哪些卷 [root@centos7 ~]# docker volume ls DRIVER VOLUME NAME local 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827 删除卷 [root@centos7 ~]# docker volume rm 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827 [root@centos7 ~]# ls /var/lib/docker/volumes/ metadata.db