在幾秒鐘內刪除 Docker 映像、捲和容器
已發表: 2023-03-03Docker 是一種軟件容器化技術,可幫助開發人員在從桌面到雲的不同平台上創建和部署應用程序。
在 Docker 容器中構建應用程序所需的源代碼、依賴項和工具的快照(或藍圖)稱為映像。 需要持久數據的 Docker 應用程序可以依賴於獨立於底層操作系統的稱為卷的存儲。
使用 Docker 時,有效組織圖像、捲和容器非常重要。 這些資產的未使用化身可能會累積,佔用寶貴的磁盤空間並最終影響系統性能。
本文探討了通過清除映像(單獨清除和同時清除所有映像)、捲和容器來維護系統組織的不同方法。 我們將使用docker
命令行界面 (CLI) 快速完成這些任務。
如何刪除 Docker 鏡像
從 Docker 中刪除過時或不必要的圖像對於維護乾淨有序的系統至關重要。 讓我們看看 CLI 如何針對特定圖像進行刪除。
首先,讓我們使用docker image ls
命令查看 Docker 環境中的鏡像:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
上面列出的圖像顯示了名為my_image和demo的圖像,它們都被標記為latest 。 第三張圖片沒有名稱或標籤。 在這種情況下,它是一個“懸掛”圖像:當前未被容器使用的圖像。 這個懸空圖像是重建my_image的結果(常見情況)。 圖像的先前版本仍在文件系統中,但現在未被使用。
該列表還顯示每個圖像的 64 字符 ID 的前 12 個字符、創建日期以及圖像佔用的存儲空間。
刪除所有未使用的圖像
在上面的列表示例中,我們有一個懸空圖像。 但是,沒有名稱或標籤的圖像可能處於活動狀態。 例如,它可以用於通過引用其 ID 來啟動容器。
要安全地刪除所有真正懸掛的圖像,您可以使用docker image prune
命令:
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
我們將再次列出我們的圖像以查看我們的工作結果:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
修剪過程後,沒有名稱或標籤的圖像消失了。
按名稱刪除特定圖像
您可以通過引用其名稱來定位要刪除的圖像:
$ docker image rm <image_name>
注意:您無法輕易刪除仍在使用的圖像。 您應該停止或刪除正在使用圖像的正在運行的容器。 雖然通常不推薦這樣做,但您可以使用-f
標誌強制刪除活動圖像:
$ docker image rm <image_name> -f
使用 rmi 速記刪除圖像
Docker CLI 有一種簡寫的方法來刪除別名rmi
中的圖像。 使用它按名稱刪除圖像如下所示:
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
我們將在以下圖像刪除示例中使用rmi
。
刪除所有未標記的圖像
未標記的圖像仍然佔用寶貴的磁盤空間,隨著時間的推移,這會越來越拖慢您的系統。
要消除 Docker 中所有未標記的圖像,請使用帶有過濾器的docker rmi
命令。 您可以使用-f
選項提供基於特定條件的過濾器(不要與image rm
可用的-f
標誌混淆以強制執行操作)。
過濾器dangling=true
用於識別未標記的圖像:
$ docker rmi $(docker images -f "dangling=true" -q)
上述命令中的-q
選項顯示所有未標記圖像的圖像 ID。 然後將所有這些 ID 作為參數傳遞給docker rmi
以刪除它們。
此過濾器使用關鍵字“懸掛”,但如上所述,一些沒有標籤的圖像實際上可能是活動的。 如果此過濾器選擇的圖像不是真正懸空的,您將收到警告。
按 ID 刪除特定圖像
您可以使用docker rmi
命令通過引用其 ID 來刪除任何特定圖像:
$ docker rmi <image_id>
按名稱和標籤刪除特定圖像
您可以使用docker rmi
命令刪除特定圖像及其名稱和標籤。
例如,如果您有多個名稱相同但標籤不同的圖像,您可以使用以下格式刪除特定的圖像:
$ docker rmi <image_name>:<tag>
當您想要刪除特定版本的圖像而不是刪除與存儲庫相關的所有圖像時,此方法很方便。
刪除所有帶有最新標籤的圖像
在 Docker 中,“最新”標籤指的是特定 Docker 映像的最新版本。 latest 標籤通常用作 Docker 鏡像的默認標籤。 除非明確指定另一個標籤,否則它會自動分配給圖像的最新版本。
Docker 提供了一個命令來刪除所有帶有“latest”標籤的鏡像:
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
上面的命令分為兩部分。 首先它獲取圖像 ID 列表,然後將此列表作為參數傳遞給docker rmi
命令。
從遠程存儲庫中刪除圖像
要從遠程存儲庫(例如 Docker Hub)中刪除圖像,您首先需要使用 Docker CLI 登錄帳戶。
登錄後,您只需使用docker rmi
命令刪除鏡像。 docker rmi
命令可以刪除本地和遠程鏡像:
docker rmi my_repo/my_image_tag
值得注意的是,您只能刪除已推送到存儲庫的圖像。 同樣,您不能刪除正在運行的容器使用的圖像。
從遠程存儲庫中刪除多個圖像
要從遠程存儲庫中刪除多個圖像,您可以使用docker rmi
命令,後跟圖像 ID 或標籤。 例如:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
這將從存儲庫my_repo
中刪除帶有標籤image_tag_1
、 image_tag_2
和image_tag_3
的三個圖像。
如何刪除 Docker 卷
Docker 卷可能會佔用大量磁盤空間,尤其是當它們包含大量數據或多個備份時。 通過刪除不再需要的捲,您可以降低數據洩露的風險並確保敏感數據無法被未經授權的用戶訪問。 定期刪除卷還可以使 Docker 環境保持最新,並防止由過時數據引起的問題。
這些命令會永久性地破壞卷中存儲的所有數據,因此請謹慎使用。
刪除所有未使用的捲
在 Docker 中,刪除未使用的捲與刪除圖像或容器一樣重要。
要釋放磁盤存儲空間,您可以使用docker volume prune
命令。
按名稱刪除特定卷
刪除 Docker 中的特定卷對於刪除未使用的捲很有用。 這是刪除卷的命令:
docker volume rm my_volume_name
使用上述命令,卷my_volume_name將被刪除。 如果您嘗試刪除已使用的捲,Docker 會產生錯誤。 您可以使用docker volume ls
命令檢查可用卷。
如何刪除 Docker 容器
隨著您使用 Docker 的次數越來越多,您可能會積累許多佔用磁盤資源的未使用容器。 如果您不刪除它們,它們會隨著時間的推移而累積並佔用寶貴的磁盤資源,從而降低您的系統速度並可能使您處於危險之中。
刪除所有停止的容器
命令docker container prune
可以刪除 Docker 中所有停止的容器。 在這裡,該命令創建了所有將被刪除的已停止容器的列表,並在繼續之前要求確認。 這有助於回收磁盤空間並保持乾淨有序的 Docker 環境,同時允許您仔細檢查您是否丟失了任何重要的東西:
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
請注意,只能使用此命令刪除已停止的容器。 如果您需要刪除正在運行的容器,您需要先停止它們或使用不同的命令。
按 ID 刪除特定容器
在 Docker 中,您可以使用docker rm command
和容器 ID 按 ID 刪除特定容器。 首先,使用docker ps command
獲取所有容器 ID:
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
上述命令僅在容器處於停止狀態時有效。 如果容器正在運行,則需要使用 -f 標誌強制刪除它:
$ docker rm -f 1ce3cdeb4035
按名稱刪除特定容器
Docker 提供了一個多用途的docker rm
命令來按名稱和 ID 刪除兩個容器。
例如,如果您有一個名為web_server的容器,您可以使用以下命令將其刪除:
$ docker rm web_server
首先,停止容器很重要。 Docker 提供了docker stop
命令來停止特定的容器。
刪除所有正在運行的容器
要刪除所有正在運行的容器,可以使用docker rm
命令:
$ docker rm $(docker ps -q)
使用docker ps -q
列出正在運行的容器的 ID。 之後,ID 被傳遞給docker rm
命令,該命令刪除所有容器。
請注意,此命令只會刪除正在運行的容器。 如果要刪除所有容器,包括已停止的容器,可以改用以下命令:
$ docker rm $(docker ps -a -q)
概括
本文介紹瞭如何刪除 Docker 映像、捲和容器。 您學習了各種方法來維護一個乾淨有序的系統。 它涵蓋了通過 ID 或名稱刪除所有未使用、未標記或特定圖像的命令。 您還學習了通過 ID 或名稱刪除所有已停止容器或特定容器的命令。
刪除 Docker 映像、捲和容器是一個簡單的過程,可以幫助您管理未使用的組件、恢復寶貴的磁盤空間並經常提高系統性能。
正是這種簡單性吸引了開發人員使用 Docker,部署在 Docker 中開發的應用程序沒有比使用 Kinsta 的應用程序託管平台更簡單的方法了。 您現在可以免費試用。