1. 程式人生 > 實用技巧 >【轉載】Docker 刪除&清理映象

【轉載】Docker 刪除&清理映象

文章首發自個人網站:https://www.exception.site/docker/docker-delete-image

本文中,您將學習 Docker 如何刪除及清理映象?

一、通過標籤刪除映象

通過如下兩個都可以刪除映象:

docker rmi [image]

或者:

docker image rm [image]

支援的子命令如下:

  • -f, -force: 強制刪除映象,即便有容器引用該映象;
  • -no-prune: 不要刪除未帶標籤的父映象;

例如,我們想刪除上章節建立的 allen_mysql:5.7 映象,命令如下:

docker rmi allen_mysql:5.7

從上面章節中,我們知道 allen_mysql:5.7docker.io/mysql:5.7 實際上指向的是同一個映象,那麼,您可以能會有疑問,我刪除了 allen_mysql:5.7, 會不會將 docker.io/mysql:5.7 映象也給刪除了?

實際上,當同一個映象擁有多個標籤時,執行 docker rmi 命令,只是會刪除了該映象眾多標籤中,您指定的標籤而已,並不會影響原始的那個映象檔案。

不信的話,我們可以執行 docker images 命令,來看下 docker.io/mysql:5.7 映象還在不在:

可以看到,docker.io/mysql:5.7 映象依然存在!

那麼,如果某個映象不存在多個標籤,當且僅當只有一個標籤時,執行刪除命令時,您就要小心了,這會徹底刪除映象。

例如,這個時候,我們再執行 docker rmi docker.io/mysql:5.7 命令:

從上圖可以看到,我們已經刪除了 docker.io/mysql:5.7 映象的所有檔案層。該映象在本地已不復存在了!

二、通過 ID 刪除映象

除了通過標籤名稱來刪除映象,我們還可以通過制定映象 ID, 來刪除映象,如:

docker rmi ee7cbd482336

一旦制定了通過 ID 來刪除映象,它會先嚐試刪除所有指向該映象的標籤,然後在刪除映象本身。

三、刪除映象的限制

刪除映象很簡單,但也不是我們何時何地都能刪除的,它存在一些限制條件。

當通過該映象建立的容器未被銷燬時,映象是無法被刪除的。為了驗證這一點,我們來做個試驗。首先,我們通過 docker pull alpine

命令,拉取一個最新的 alpine 映象, 然後啟動映象,讓其輸出 hello, docker!:

接下來,我們來刪除這個映象試試:

可以看到提示資訊,無法刪除該映象,因為有容器正在引用他!同時,這段資訊還告訴我們,除非通過新增 -f 子命令,也就是強制刪除,才能移除掉該映象!

docker rmi -f docker.io/alpine

但是,我們一般不推薦這樣暴力的做法,正確的做法應該是:

  1. 先刪除引用這個映象的容器;
  2. 再刪除這個映象;

也就是,根據上圖中提示的,引用該映象的容器 ID (9d59e2278553), 執行刪除命令:

docker rm 9d59e2278553

然後,再執行刪除映象的命令:

docker rmi 5cb3aa00f899

這個時候,就能正常刪除了!

四、清理映象

我們在使用 Docker 一段時間後,系統一般都會殘存一些臨時的、沒有被使用的映象檔案,可以通過以下命令進行清理:

docker image prune

它支援的子命令有:

  • -a, --all: 刪除所有沒有用的映象,而不僅僅是臨時檔案;
  • -f, --force:強制刪除映象檔案,無需彈出提示確認;

另外,執行完 docker image prune 命令後,還是告訴我們釋放了多少儲存空間!

五、總結

本文中,我們知道了 Docker 中如何刪除以及清理映象,通過標籤和通過 ID 來刪除映象的相關細節,刪除映象又存在哪些限制等。祝您學習愉快!