Docker 如何移除無用的映像檔來清出更多空間?

當執行 docker build 時 Docker 有時會出現「no space left on device」的錯誤訊息,原因通常是因為給予 Docker 的空間已經不足,而通常會造成空間不足的理由大多是因為映像檔 (Image) 佔用過多空間。這篇文章會說明為什麼會有無用映像檔的產生,以及如何清除無用的映像檔來清出空間。

為什麼會有無用的映像檔產生?

Docker 並不會自動刪除我們 pull 或是自行 build 的映像檔,每當我們執行 docker build 或是 docker pull 時,Docker 會從遠端或是本地端建立出新的映像檔(包含中間層映像檔和最終映像檔),這些檔案經年累月的留存在你的硬碟上自然而然就導致了儲存空間不夠。

如果你在 docker build 時使用相同的標籤名稱,那麼 Docker 會產生所謂的懸空映像檔 (Dangling Image),這種映像檔也會造成部分不必要的空間浪費。

該如何清除無用的映像檔?

你可以執行 docker images 查看映像檔列表後,使用指令 docker rmi 來移除無用的映像檔。如果你無法判斷哪些是不必要的映像檔,你可以使用 docker image prune -a 指令讓 Docker 自動幫你判斷哪些是已經無用的映像檔,這個指令並不會影響正在運行中容器所使用的映像檔。

除此之外你也可以執行指令 docker system prune -a 來刪除無用的映像檔,這個指令與 docker image prune -a 的差別是它除了刪除不必要的映像檔以外,他同時也刪除掉已經停止的容器(Cotaniner)