刪除Docker映象、卷和容器實用命令列

在幾秒鐘內刪除Docker映象、卷和容器

Docker是軟體容器化技術,幫助開發者在從桌面到的不同平臺上建立和部署應用程式。

在Docker容器中構建應用程式所需的原始碼、依賴關係和工具的快照–或藍圖,被稱為映象。需要永續性資料的Docker應用程式可以依賴獨立於底層作業系統的儲存,稱為卷。

在使用Docker時,有效組織映象、卷和容器是很重要的。這些資產的未使用的化身會累積起來,佔用寶貴的磁碟空間,最終影響系統效能。

本文探討了通過刪除映象、卷和容器來維護系統組織的不同方法。而且我們將使用 docker 命令列介面(CLI)來快速完成這些任務。

  1. 如何刪除Docker映象
  2. 如何刪除Docker卷
  3. 如何刪除Docker容器

如何刪除Docker映象

從Docker中刪除過期或不必要的映象對於保持系統的整潔和有序至關重要。讓我們來看看CLI如何針對某些映象進行刪除。

首先,讓我們用 docker image ls 命令來看看Docker環境中的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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
$ 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
$ 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_imagedemo的映象,都被標記為latest。第三個映象沒有名稱或標籤。在這種情況下,它是一個 “dangling” 的映象:一個目前沒有被容器使用的映象。這個懸空的映象是由my_image的重建造成的(一種常見的情況)。先前版本的映像仍然在檔案系統中,但現在沒有被使用。

該列表還顯示了每個映象的64個字元的ID的前12個字元,建立日期,以及映象所消耗的儲存空間。

刪除所有未使用的映象

在上面的列表例子中,我們有一個dangling映象。然而,一個沒有名字或標籤的映象有可能是活動的。例如,它可以通過引用其ID來啟動一個容器。

為了安全地刪除所有真正dangling映象,你可以使用 docker image prune 命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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 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 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

我們再列出我們的映象,看看執行命令後的效果:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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 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 ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   70 seconds ago       7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

在修剪過程中,沒有名字或標籤的映象已經消失了。

按名稱刪除特定映象

你可以通過引用一個映象的名稱來鎖定該映象進行刪除:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker image rm <image_name>
$ docker image rm <image_name>
$ docker image rm <image_name>

注意:你不能輕易地刪除仍在使用的映象。你應該停止或刪除正在使用映象的執行中的容器。雖然通常不推薦這樣做,但你可以使用 -f 標誌強制刪除一個活動的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker image rm <image_name> -f
$ docker image rm <image_name> -f
$ docker image rm <image_name> -f

使用rmi速記來刪除映象

Docker CLI在別名 rmi 中有一個刪除映象的速記方法。使用它來刪除一個映象的名字,看起來像這樣:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

我們將使用 rmi 來完成下面的映象清除例子。

刪除所有未標記的映象

沒有標記的映象仍然佔據著寶貴的磁碟空間,隨著時間的推移,會使你的系統越來越慢。

要消除Docker中所有未標記的映象,可以使用帶有過濾器的 docker rmi 命令。你可以使用 -f 選項提供基於特定標準的過濾器(不要與 image rm 可用的 -f 標誌相混淆,以強制採取行動)。

過濾器 dangling=true 用於識別未標記的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rmi $(docker images -f "dangling=true" -q)
$ docker rmi $(docker images -f "dangling=true" -q)
$ docker rmi $(docker images -f "dangling=true" -q)

上述命令中的 -q 選項顯示了所有未標記的映象的ID。然後將所有這些ID作為引數傳遞給 docker rmi,以便將其刪除。

這個過濾器使用關鍵字 “dangling”,但如上所述,一些沒有標籤的映象實際上可能是活動的。如果被這個過濾器選中的映象不是真正的懸空,你會被警告的。

按ID刪除特定映象

你可以使用 docker rmi 命令,通過引用其ID來刪除任何特定的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rmi <image_id>
$ docker rmi <image_id>
$ docker rmi <image_id>

按名稱和標籤刪除特定映象

你可以通過使用 docker rmi 命令來刪除一個特定的映象以及它的名字和標籤。

例如,如果你有多個具有相同名稱但不同標籤的映象,你可以通過使用這種格式來刪除一個特定的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rmi <image_name>:<tag>
$ docker rmi <image_name>:<tag>
$ docker rmi <image_name>:<tag>

當你想刪除一個特定版本的映象,而不是刪除與一個資源庫相關的所有映象時,這種方法很方便。

移除所有帶有latest標籤的映象

在Docker中,”latest” 標籤指的是某個Docker映象的最新版本。最新標籤通常被用作Docker映象的預設標籤。它被自動分配給映象的最新構建,除非明確指定另一個標籤。

Docker提供了一個命令來刪除所有帶有 “latest” 標籤的映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

上述命令分為兩部分。首先,它得到了映象ID的列表,然後將這個列表作為引數傳遞給 docker rmi 命令。

從遠端儲存庫中刪除映象

要從遠端倉庫(如Docker Hub)中刪除一個映象,你首先需要使用Docker CLI登入該賬戶。

一旦你登入了,你只需要使用 docker rmi 命令來刪除該映象。 docker rmi 命令可以同時刪除本地和遠端映象:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker rmi my_repo/my_image_tag
docker rmi my_repo/my_image_tag
docker rmi my_repo/my_image_tag

值得注意的是,你只能刪除已經推送到儲存庫的映象。同樣,你也不能刪除正在執行的容器所使用的映象。

從遠端版本庫中刪除多個映象

要從遠端倉庫移除多個映象,你可以使用 docker rmi 命令,後面跟上映象的ID或標籤。比如說:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

這將從版本庫 my_repo 中刪除帶有 image_tag_1image_tag_2 和 image_tag_3 標籤的三張映象。

如何刪除Docker卷

Docker卷可能會佔用大量的磁碟空間,特別是當它們包含大量的資料或多個備份時。通過刪除不再需要的卷,你可以減少資料洩露的風險,確保敏感資料不會被未經授權的使用者訪問。定期刪除卷也可以使Docker環境保持最新,並防止由過時的資料引起的問題。

這些命令會永久地破壞儲存在卷中的所有資料,所以要謹慎使用它們。

移除所有未使用的卷

在Docker中,刪除未使用的卷與刪除映象或容器一樣關鍵。

為了釋放磁碟儲存,你可以使用 docker volume prune 命令。

按名稱刪除一個特定卷

在Docker中刪除一個特定的卷,對於刪除未使用的卷很有用。下面是刪除一個卷的命令。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume rm my_volume_name
docker volume rm my_volume_name
docker volume rm my_volume_name

通過上述命令,my_volume_name卷將被刪除。如果你試圖刪除一個已使用的卷,Docker會產生一個錯誤。你可以使用 docker volume ls 命令來檢查可用的卷。

如何刪除Docker容器

當你更多地使用Docker工作時,你可能會積累許多未使用的容器,這些容器佔用了磁碟資源。如果你不刪除它們,它們會隨著時間的推移積累起來,佔用寶貴的磁碟資源,拖慢你的系統,並有可能使你陷入危險。

移除所有停止的容器

命令 docker container prune 可以刪除Docker中所有停止的容器。在這裡,該命令建立了一個將被刪除的所有停止的容器的列表,並在繼續進行之前要求確認。這有助於回收磁碟空間,維持一個乾淨有序的Docker環境,同時允許你仔細檢查你沒有失去任何重要的東西:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
4df4c47c4df4
d35bcec20bce
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
$ 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 命令和容器ID一起按ID刪除一個特定的容器。首先,使用 docker ps 命令獲得所有的容器ID:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035

上述命令只有在容器處於停止狀態時才有效。如果容器正在執行,那麼你需要使用-f標誌強行刪除它:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rm -f 1ce3cdeb4035
$ docker rm -f 1ce3cdeb4035
$ docker rm -f 1ce3cdeb4035

按名稱刪除一個特定的容器

Docker提供了一個多用途的 docker rm 命令,可以按名稱和ID刪除容器。

例如,如果你有一個名為web_server的容器,你可以用下面的命令來刪除它:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rm web_server
$ docker rm web_server
$ docker rm web_server

首先,停止容器是很重要的。Docker提供了 docker stop 命令來停止一個特定的容器。

移除所有執行中的容器

要刪除所有正在執行的容器,你可以使用 docker rm 命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rm $(docker ps -q)
$ docker rm $(docker ps -q)
$ docker rm $(docker ps -q)

使用 docker ps -q 可以列出執行中的容器的ID。之後,ID被傳遞給 docker rm 命令,該命令會移除所有的容器。

注意,這個命令只會刪除正在執行的容器。如果你想刪除所有的容器,包括停止的容器,你可以使用下面的命令來代替:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ docker rm $(docker ps -a -q)
$ docker rm $(docker ps -a -q)
$ docker rm $(docker ps -a -q)

小結

這篇文章解釋瞭如何刪除Docker映象、卷和容器。你學到了各種方法來維護一個乾淨和有組織的系統。它涵蓋了按ID或名稱刪除所有未使用的、未標記的或特定的映象的命令。你還學習了按ID或名稱刪除所有停止的容器或特定容器的命令。

刪除Docker映象、卷和容器是一個簡單明瞭的過程,可以幫助你管理未使用的元件,恢復寶貴的磁碟空間,並經常提高系統效能。

評論留言