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

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


再次查看:
docker images

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

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

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

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

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,能快速清理懸空鏡像和無(wú)用資源。
通過(guò)合理清理,既能節(jié)省磁盤空間,又能讓 Docker 環(huán)境保持干凈高效。
以上就是Docker中刪除鏡像與容器的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Docker刪除鏡像與容器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker-compose java.net.UnknownHostException問(wèn)題
這篇文章主要介紹了docker-compose java.net.UnknownHostException問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Docker基礎(chǔ)知識(shí)之Linux namespace圖文詳解
這篇文章主要給大家介紹了關(guān)于Docker基礎(chǔ)知識(shí)之Linux namespace的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
Docker與docker-compose中volume參數(shù)的使用方式
文章介紹了Docker中的數(shù)據(jù)卷Volume的概念及其在宿主機(jī)和容器之間的數(shù)據(jù)共享和持久化,它詳細(xì)說(shuō)明了兩種數(shù)據(jù)掛載方式:通過(guò)宿主機(jī)絕對(duì)路徑掛載和通過(guò)卷標(biāo)映射掛載,包括匿名掛載和具名掛載,同時(shí),文章還展示了如何通過(guò)docker命令查看數(shù)據(jù)卷的宿主機(jī)目錄2024-11-11
Docker部署的gitlab升級(jí)的詳細(xì)步驟(升級(jí)到17.6.1版本)
本文詳細(xì)介紹了如何從GitLab 17.1.2版本升級(jí)到17.6.1版本,包括備份數(shù)據(jù)、確定升級(jí)路線、分步驟升級(jí)以及最終驗(yàn)證新版本的步驟,需要的朋友可以參考下2025-02-02
解決執(zhí)行docker daemon命令時(shí)出錯(cuò)的問(wèn)題
daemon 這是docker 操作中十分常用的命令指定項(xiàng),最近在運(yùn)行docker daemon命令卻發(fā)生了錯(cuò)誤,后來(lái)通過(guò)測(cè)試各種方法終于解決了,現(xiàn)在將方法分享給大家,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11
docker-compose部署配置jenkins的詳細(xì)教程
這篇文章主要介紹了docker-compose部署配置jenkins的詳細(xì)教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)
這篇文章主要介紹了Docker部署Kafka以及Spring Kafka實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Docker在Windows上安裝和使用教程(加速容器應(yīng)用開發(fā))
Docker依賴Linux內(nèi)核,需部署于Linux系統(tǒng)或虛擬環(huán)境,安裝需確認(rèn)架構(gòu)、下載安裝包、重啟驗(yàn)證,操作流程簡(jiǎn)潔高效,本文給大家介紹Docker在Windows上安裝和使用教程,感興趣的朋友跟隨小編一起看看吧2025-09-09
Docker容器如何訪問(wèn)宿主機(jī)的Mysql數(shù)據(jù)庫(kù)
使用Docker能實(shí)現(xiàn)服務(wù)的容器化,并使用容器間網(wǎng)絡(luò)在它們之間進(jìn)行通信,下面這篇文章主要給大家介紹了關(guān)于Docker容器如何訪問(wèn)宿主機(jī)的Mysql數(shù)據(jù)庫(kù),需要的朋友可以參考下2024-04-04

