列出 Docker 卷
一、概述
Docker是最流行的容器技術之一。它將應用程序與其依賴項打包在一起,並允許它在隔離的環境中運行。這種技術極大地增加了應用程序的可移植性。默認情況下,容器存儲是短暫的,這對於有狀態的應用程序來說並不理想。但是,我們可以使用卷來克服這個限制。
在本教程中,我們將了解如何列出卷並顯示有關它們的詳細信息。
2. 建立一個例子
讓我們創建一些帶有屬性的捲以用作示例:
$ docker volume create dangling-volume
$ docker volume create narendra-volume --driver local --opt type=tmpfs --opt device=tmpfs
$ docker volume create labeled-volume --label owner=narendra
本教程的後面部分展示了我們如何使用這些屬性來過濾卷。在下一節中,我們將看到如何驗證我們的示例是否已正確設置。
3. 顯示基本卷信息
Docker 的volume
list
子命令將顯示每個卷的簡要摘要:
$ docker volume list
DRIVER VOLUME NAME
local dangling-volume
local labeled-volume
local narendra-volume
有時,我們只需要卷名。在這種情況下,我們可以使用–quiet
選項:
$ docker volume list --quiet
dangling-volume
labeled-volume
narendra-volume
上述方法適用於少量卷,但當要列出許多卷時可能會很乏味。在這種情況下,我們可以使用–filter
選項。此選項允許我們根據某些屬性執行過濾。讓我們看幾個例子。
3.1。按名稱過濾
我們可以使用name
過濾器來列出名稱中包含某個字符串的捲。讓我們列出名稱中包含“narendra”的捲:
$ docker volume list --filter name=narendra
DRIVER VOLUME NAME
local narendra-volume
3.2.過濾標籤
標籤用於標記資源。一個非常常見的場景是對符合特定條件的資源進行分組。例如,開發人員可以使用他們的用戶名作為標籤,以便他們可以輕鬆識別他們自己創建的捲。讓我們通過一個例子來理解這一點:
$ docker volume list --filter label=owner=narendra
DRIVER VOLUME NAME
local labeled-volume
在此示例中,過濾器匹配帶有標籤owner=narendra
的捲,這是我們在設置示例卷時添加的。
3.3.過濾**司機**姓名
有時,我們需要根據驅動程序的名稱來隔離卷。在這種情況下,我們可以使用driver
過濾器:
$ docker volume list --filter driver=local
DRIVER VOLUME NAME
local dangling-volume
local labeled-volume
local narendra-volume
3.4.懸空卷
卷會佔用 docker 主機上的空間,因此清理任何未使用的捲是一個好習慣。因為刪除錯誤的捲可能會導致數據丟失,所以在刪除它們之前我們必須格外小心。作為安全檢查,我們可以通過使用dangling
filter 確保任何容器都沒有引用卷。讓我們看看這個在行動。
首先,讓我們創建一個使用卷的容器:
$ docker container run -d --name dangling-volume-demo -v narendra-volume:/tmpwork \
-v labeled-volume:/data busybox
fa3f6fd8261293a92da7efbca4b04040a1838cf57b2703795324eb70a3d84143
在這個例子中,容器使用了我們三個卷中的兩個: narendra-volume
和labeled-volume
。現在讓我們確認第三卷是唯一顯示為懸空/未使用的捲:
$ docker volume list --filter dangling=true
DRIVER VOLUME NAME
local dangling-volume
4. 顯示詳細的交易量信息
list
child 命令顯示有關卷的非常有限的信息。有時這還不夠。例如,如果我們知道卷的詳細信息,調試會容易得多。在這種情況下,我們可以使用volume
inspect
child 命令來獲取有關卷的附加信息。此命令顯示卷的創建時間戳、掛載點等信息。讓我們用一個例子來看看:
$ docker volume inspect labeled-volume
[
{
"CreatedAt": "2022-05-30T22:34:53+05:30",
"Driver": "local",
"Labels": {
"owner": "narendra"
},
"Mountpoint": "/var/lib/docker/volumes/labeled-volume/_data",
"Name": "labeled-volume",
"Options": {},
"Scope": "local"
}
]
5. 顯示容器特定的捲信息
另一個非常常見的場景是查找給定容器使用的捲。開發人員經常需要這些信息來調試應用程序。我們可以使用container
inspect
子命令獲取有關特定容器卷的信息。此命令返回有關 Docker 對象的低級信息,例如它們的狀態、主機配置、網絡設置等。我們可以指定Mounts
部分來收集有關卷的安裝信息:
$ docker container inspect --format '{{ json .Mounts }}' dangling-volume-demo | python3 -m json.tool
[
{
"Type": "volume",
"Name": "narendra-volume",
"Source": "/var/lib/docker/volumes/narendra-volume/_data",
"Destination": "/tmpwork",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "labeled-volume",
"Source": "/var/lib/docker/volumes/labeled-volume/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
請注意,在此示例中,我們將輸出通過管道傳輸到Python解釋器,以使 JSON 輸出更易於閱讀。但是,這完全是可選的。
六,結論
在本文中,我們看到了一些列出 docker 卷的實際示例。首先,我們使用了list
child 命令。然後我們看到瞭如何使用filters
。最後,我們使用了inspect
子命令來顯示有關卷的詳細信息。