卷是持久化由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