Docker卷管理

本文章內容:

Docker卷管理。

 

1. 創建存儲卷兩種方式

1.1  Bind mount volume(綁定掛載卷)

創建容器時將掛載點綁定到宿主機上創建存儲卷的路徑。提示:宿主機不需先創建存儲卷,創建容器時會自動生成。

用法:

docker container run --name busybox1 -v HOSTDIR:VOLUMEDIR -it busybox:latest  #-v HOSTDIR:VOLUMEDIR:HOSTDIR是宿主機上創建卷的路徑,VOLUMEDIR是容器掛載點

docker container inspect -f {{.Mounts}} busybox1  #使用Go語言模板查看busybox1容器的卷、卷標識符及掛載的宿主機目錄,或使用docker container inspect busybox1看Mounts部分也行

1.1.1  示例1

創建容器並指定掛載點/data映射到宿主機上的/data/volumes/busybox1位置

[root@localhost ~]# docker container run --name busybox1 -v /data/volumes/busybox1:/data -it busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ #

2. 執行docker container inspect -f {{.Mounts}} busybox1

[root@localhost ~]# docker container inspect -f {{.Mounts}} busybox1  #顯示執行docker container inspect busybox1的Mounts部分的所有值                 
[{bind  /data/volumes/busybox1 /data   true rprivate}]

3. 執行docker container inspect -f '{{(index .Mounts 0).Source}}' busybox1

[root@localhost ~]# docker container inspect -f '{{(index .Mounts 0).Source}}' busybox1  #僅顯示執行docker container inspect busybox1的Mounts部分的Source的值
/data/volumes/busybox1  #容器掛載點映射到宿主機上的存儲卷的位置

1.2  Docker-managed volume(Docker管理卷)

創建容器時指定掛載點即可,Docker引擎會自動綁定到宿主機上的特定路徑下。

用法:

docker container run --name busybox1 -v /data -it busybox:latest  #-v /data:容器掛載點

docker container inspect -f {{.Mounts}} busybox1  #使用Go語言模板查看busybox1容器的卷、卷標識符及掛載的宿主機目錄,或使用docker container inspect busybox1看Mounts部分也行

1.2.1  示例1

1. 創建容器並指定掛載點/data

[root@localhost ~]# docker container run --name busybox1 -v /data -it busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/

2. 執行docker container inspect -f {{.Mounts}} busybox1

[root@localhost ~]# docker container inspect -f {{.Mounts}} busybox1  #顯示執行docker container inspect busybox1的Mounts部分的所有值           
[{volume cea43c1430c816efc00516097ae933ebd6e63edcebbca931b96763533466d8bd /var/lib/docker/volumes/cea43c1430c816efc00516097ae933ebd6e63edcebbca931b96763533466d8bd/_data /data local  true }]

3. 執行docker container inspect -f '{{(index .Mounts 0).Source}}' busybox1

[root@localhost ~]# docker container inspect -f '{{(index .Mounts 0).Source}}' busybox1  #僅顯示執行docker container inspect busybox1的Mounts部分的Source的值
/var/lib/docker/volumes/cea43c1430c816efc00516097ae933ebd6e63edcebbca931b96763533466d8bd/_data  #容器掛載點映射到宿主機上的存儲卷的位置

2.--volumes-from(容器複製容器的存儲卷設置)

容器1設置有一個存儲卷,容器2創建時想與容器1共用同一個存儲卷。這樣就可以創建一個基礎容器,之後創建的容器使用"--volumes-from"選項指定基礎容器,即可與基礎容器使用同一個存儲卷,而不用記存儲卷的路徑大家可以共用同一個存儲卷。

1. 創建基礎容器

[root@localhost ~]# docker container create --name busyboxinfra -it -v /data/volumes/web:/www/html busybox:latest  #busyboxinfra是基礎容器
WARNING: IPv4 forwarding is disabled. Networking will not work.
0136ecd5c78339f4d2d59cbef0458536461159a8489dbd37964e733e34aac6ab
[root@localhost ~]# docker container ls -a
CONTAINER ID   IMAGE            COMMAND   CREATED         STATUS    PORTS     NAMES
0136ecd5c783   busybox:latest   "sh"      7 seconds ago   Created             busyboxinfra

2. 創建容器1並複製基礎容器的存儲卷設置

[root@localhost ~]# docker container run --name busybox1 --volumes-from busyboxinfra -it busybox:latest  #使用"--volumes-from"選項指定基礎容器
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls  #共用基礎容器的存儲卷
bin   dev   etc   home  proc  root  sys   tmp   usr   var   www
/ #

3. 創建容器2並複製基礎容器的存儲卷設置

[root@localhost ~]# docker container run --name busybox2 --volumes-from busyboxinfra -it busybox:latest  #使用"--volumes-from"選項指定基礎容器
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var   www
/ #