Docker是軟體容器化技術,幫助開發者在從桌面到雲的不同平臺上建立和部署應用程式。
在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。第三個映象沒有名稱或標籤。在這種情況下,它是一個 “dangling” 的映象:一個目前沒有被容器使用的映象。這個懸空的映象是由my_image的重建造成的(一種常見的情況)。先前版本的映像仍然在檔案系統中,但現在沒有被使用。
該列表還顯示了每個映象的64個字元的ID的前12個字元,建立日期,以及映象所消耗的儲存空間。
刪除所有未使用的映象
在上面的列表例子中,我們有一個dangling映象。然而,一個沒有名字或標籤的映象有可能是活動的。例如,它可以通過引用其ID來啟動一個容器。
為了安全地刪除所有真正dangling映象,你可以使用 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
,以便將其刪除。
這個過濾器使用關鍵字 “dangling”,但如上所述,一些沒有標籤的映象實際上可能是活動的。如果被這個過濾器選中的映象不是真正的懸空,你會被警告的。
按ID刪除特定映象
你可以使用 docker rmi
命令,通過引用其ID來刪除任何特定的映象:
$ docker rmi <image_id>
按名稱和標籤刪除特定映象
你可以通過使用 docker rmi
命令來刪除一個特定的映象以及它的名字和標籤。
例如,如果你有多個具有相同名稱但不同標籤的映象,你可以通過使用這種格式來刪除一個特定的映象:
$ docker rmi <image_name>:<tag>
當你想刪除一個特定版本的映象,而不是刪除與一個資源庫相關的所有映象時,這種方法很方便。
移除所有帶有latest標籤的映象
在Docker中,”latest” 標籤指的是某個Docker映象的最新版本。最新標籤通常被用作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
命令和容器ID一起按ID刪除一個特定的容器。首先,使用 docker ps
命令獲得所有的容器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映象、卷和容器是一個簡單明瞭的過程,可以幫助你管理未使用的元件,恢復寶貴的磁碟空間,並經常提高系統效能。
評論留言