Docker中刪除鏡像與容器的完整指南
引言
在日常使用 Docker 的過程中,未使用的鏡像往往會不斷累積,占用大量磁盤空間。學(xué)會高效地查找并刪除不必要的鏡像,不僅能回收存儲容量,還能保持系統(tǒng)的整潔。
本文將演示如何從系統(tǒng)中刪除 Docker 鏡像,并介紹刪除前需要注意的事項(xiàng)。開始之前,我們先了解一下 Docker 的基本概念:什么是 Docker、什么是 Docker 鏡像,以及這些鏡像存儲在何處。
什么是 Docker?
自十多年前發(fā)布以來,Docker 一直以其高效可靠的應(yīng)用構(gòu)建與部署工具而聞名。它是一個開源平臺,利用操作系統(tǒng)級虛擬化技術(shù)來構(gòu)建、測試并無縫部署分布式應(yīng)用。
什么是 Docker 鏡像?
Docker 鏡像是用于創(chuàng)建容器的只讀模板。鏡像中包含應(yīng)用程序及其所需的依賴包、庫、工具和配置文件。基于鏡像運(yùn)行的容器是一個輕量級、獨(dú)立、隔離的運(yùn)行單元,可以在不同的平臺上保持一致的運(yùn)行效果。
與傳統(tǒng)虛擬機(jī)相比,容器具有更高的可移植性、更低的資源開銷和更高的效率。但與此同時,鏡像和容器也很容易在系統(tǒng)中堆積,造成磁盤空間不足。好在 Docker 提供了命令行工具,方便我們定期清理無用的鏡像和容器。
Docker 鏡像存儲在哪里?
Docker 鏡像通常存放在鏡像注冊中心。默認(rèn)情況下,它們會存儲在 Docker Hub 上,也可以托管在 GitLab、阿里云等第三方鏡像庫,或者保存在本地磁盤和私有倉庫中。
刪除鏡像前的注意事項(xiàng)
在刪除 Docker 鏡像之前,需要特別小心。若操作不當(dāng),可能會導(dǎo)致容器崩潰或數(shù)據(jù)丟失。以下是幾條常見的預(yù)防措施:
1. 檢查容器依賴
確保沒有正在運(yùn)行或已停止的容器依賴于該鏡像。雖然運(yùn)行中的容器不直接依賴鏡像,但一旦鏡像被刪除,將無法重新啟動這些容器。
檢查方法:
docker ps -a --filter ancestor=<image_id_or_name>
如果輸出中有容器,請先停止并刪除它們:
docker stop <container_id> docker rm <container_id>
此外,還要確認(rèn)該鏡像不是其他鏡像的基礎(chǔ)層??墒褂靡韵旅顧z查:
docker image inspect <image_id>
2. 備份數(shù)據(jù)
除非已在其他地方保存副本,否則不要貿(mào)然刪除鏡像。提前做好備份,可以確保在新版本失敗或需要回退時,能夠恢復(fù)舊容器版本。
3. 確認(rèn)用途
確認(rèn)該鏡像不再被 Docker Compose、Kubernetes 配置文件或 CI/CD 管道所使用。
4. 更新文檔與腳本
若有文檔或自動化腳本仍引用舊鏡像,請及時更新,以免后續(xù)出現(xiàn)問題。
環(huán)境準(zhǔn)備
本文示例基于 Ubuntu 24.04 環(huán)境,且系統(tǒng)中已安裝并運(yùn)行 Docker。如果你尚未安裝,可參考如何在 Ubuntu 20.04 或 Ubuntu 24.04 上安裝 Docker。
刪除 Docker 鏡像的幾種方法
下面我們演示幾種常見的刪除方式,包括刪除單個鏡像、懸空鏡像,以及批量刪除所有鏡像。
1. 刪除一個或多個鏡像
使用以下命令刪除指定鏡像:
docker rmi IMAGE_ID
先列出鏡像:
docker images

若系統(tǒng)沒有鏡像,只會顯示表頭。
例如,我們從 Docker Hub 拉取 postgres 和 redis 鏡像:
docker pull postgres docker pull redis


再次查看:
docker images

假設(shè)我們要刪除 redis 鏡像:
docker rmi <redis_image_id>
此時僅剩下 postgres。如果要同時刪除多個鏡像,可以一次傳入多個 ID:
docker rmi <id1> <id2>

2. 刪除懸空鏡像
懸空鏡像(dangling image) 是指沒有標(biāo)簽(:)的鏡像,通常是在重新構(gòu)建帶有相同標(biāo)簽的新鏡像時產(chǎn)生的。
列出懸空鏡像:
docker images -f dangling=true
刪除所有懸空鏡像:
docker image prune
系統(tǒng)會提示確認(rèn),輸入 y 即可。

3. 刪除與正在運(yùn)行的容器相關(guān)聯(lián)的鏡像
如果鏡像正被容器使用,直接刪除會報錯。
例如運(yùn)行一個 Nginx 容器:
docker run -d --name docker-nginx -p 8080:80 nginx

此時嘗試刪除 nginx 鏡像會失敗。解決辦法是先停止并刪除容器:

docker stop <container_id> docker rm <container_id> docker rmi <nginx_image_id>


4. 刪除所有鏡像
如果要一鍵清理系統(tǒng)中的所有鏡像,可以執(zhí)行:
docker rmi $(docker images -a -q)
總結(jié)
- 刪除前要確認(rèn)容器和依賴關(guān)系,避免誤刪導(dǎo)致業(yè)務(wù)中斷。
- 刪除順序通常是 先容器,再鏡像。
- 善用
docker image prune與docker system prune,能快速清理懸空鏡像和無用資源。
通過合理清理,既能節(jié)省磁盤空間,又能讓 Docker 環(huán)境保持干凈高效。
以上就是Docker中刪除鏡像與容器的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Docker刪除鏡像與容器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker映射端口穿透內(nèi)置防火墻的實(shí)現(xiàn)
在使用Docker部署項(xiàng)目時,即使未開啟CentOS7的Firewalld防火墻,端口仍可被外網(wǎng)訪問,這是因?yàn)镈ocker在安裝后會接管iptables,并自動添加規(guī)則以放行指定端口,解決方法包括依賴外置防火墻放行端口、指定端口監(jiān)聽地址為本機(jī)、禁用Docker的iptables規(guī)則修改2024-10-10
Docker搭建持續(xù)集成平臺Jenkins的最簡教程分享
Jenkins 是一個廣泛使用的開源持續(xù)集成工具,它能夠自動化構(gòu)建、測試和部署軟件項(xiàng)目,本文我們將使用 Docker 搭建一個基于 Jenkins 的持續(xù)集成平臺,感興趣的可以了解下2024-03-03
docker使用Dockerfile構(gòu)建鏡像的方法
這篇文章主要介紹了docker使用Dockerfile構(gòu)建鏡像的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
Docker Compose安裝部署PostgreSQL數(shù)據(jù)庫的實(shí)現(xiàn)步驟
本文主要介紹了使用DockerCompose在Linux服務(wù)器上部署PostgreSQL,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12

