一文教你如何清理Docker中閑置的鏡像,容器和卷
Docker 讓你可以輕松地將應(yīng)用程序和服務(wù)封裝進(jìn)容器中,使它們可以在任何地方運(yùn)行。然而,在使用 Docker 的過程中,很容易積累大量未使用的鏡像、容器和數(shù)據(jù)卷,這些未使用的資源不僅占據(jù)輸出空間,還會(huì)消耗磁盤空間。
Docker 提供了所有你需要的工具,通過命令行來清理你的系統(tǒng)。這份備忘單式指南為你提供了一些實(shí)用的命令快速參考,幫助你通過刪除未使用的 Docker 鏡像、容器和卷來釋放磁盤空間,保持系統(tǒng)整潔。
本教程采用備忘錄格式,包含了所有可執(zhí)行的操作,以及對應(yīng)的命令行片段。
注意:命令中使用的命令替換語法,$(command),在許多流行的 Shell 中都可用,如 bash、zsh 和 Windows Powershell。
另外,如果你想要一種給服務(wù)器一鍵部署 Docker 應(yīng)用的方式,可以試試看 DigitalOcean App Platform。
清除所有未使用或懸空鏡像、容器、卷和網(wǎng)絡(luò)
Docker 提供了一個(gè)單一命令,可以清理任何懸空(dangling)的資源 —— 鏡像、容器、卷和網(wǎng)絡(luò) —— 這些資源沒有被標(biāo)記或與任何容器關(guān)聯(lián):
docker system prune
要同時(shí)刪除所有已停止的容器和所有未使用的鏡像(不僅僅是懸空鏡像),請?jiān)诿钪刑砑?-a 標(biāo)志:
docker system prune -a
刪除 Docker 鏡像
刪除一個(gè)或多個(gè)特定鏡像
使用帶有 -a 標(biāo)志的 docker images 命令來找到你想要?jiǎng)h除的鏡像的 ID。這將顯示所有鏡像,包括中間鏡像層。當(dāng)你找到想要?jiǎng)h除的鏡像時(shí),可以將它們的 ID 或標(biāo)簽傳遞給 docker rmi 命令:
查找鏡像:
docker images -a
刪除鏡像:
docker rmi Image Image
注意:docker images 命令中的 -a 或 --all 標(biāo)志會(huì)顯示所有 Docker 鏡像,包括那些沒有被任何標(biāo)簽引用的中間鏡像。默認(rèn)情況下,docker images 僅顯示至少有一個(gè)標(biāo)簽的鏡像。然而,可能有一些沒有任何標(biāo)簽的鏡像仍然占用系統(tǒng)磁盤空間。-a 標(biāo)志有助于識(shí)別可以清理以節(jié)省磁盤空間的鏡像。當(dāng)與 docker rmi 命令一起使用時(shí),也可以使用 -f 或 --force 標(biāo)志來刪除沒有標(biāo)簽的鏡像。
刪除懸空的 Docker 鏡像
Docker 鏡像由多個(gè)層組成。懸空鏡像是那些與任何標(biāo)記過的鏡像無關(guān)的層。它們不再有用并消耗磁盤空間??梢酝ㄟ^在 docker images 命令中添加過濾標(biāo)志 -f 并設(shè)置值為 dangling=true 來定位這些鏡像。當(dāng)你確定要?jiǎng)h除它們時(shí),可以使用 docker image prune 命令:
注意:如果你構(gòu)建了一個(gè)沒有標(biāo)記的鏡像,該鏡像將出現(xiàn)在懸空鏡像列表中,因?yàn)樗c任何標(biāo)記過的鏡像無關(guān)。你可以通過在構(gòu)建時(shí)提供一個(gè)標(biāo)簽來避免這種情況,并且可以使用 docker tag 命令對鏡像進(jìn)行追溯標(biāo)記。
查找鏡像:
docker images -f dangling=true
刪除鏡像:
docker image prune
根據(jù)模式刪除鏡像
你可以使用 docker images 和 grep 的組合找到所有與某個(gè)模式匹配的鏡像。一旦確定,可以使用 awk 將 ID 傳遞給 docker rmi 進(jìn)行刪除。注意,這些工具不是 Docker 提供的,也不一定在所有系統(tǒng)上可用:
查找鏡像:
docker images -a | grep "pattern"
刪除鏡像:
docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi
刪除所有鏡像
系統(tǒng)上的所有 Docker 鏡像可以通過在 docker images 命令中添加 -a 來列出。一旦你確定要?jiǎng)h除它們,可以添加 -q 標(biāo)志來傳遞鏡像 ID 給 docker rmi:
查找鏡像:
docker images -a
刪除鏡像:
docker rmi $(docker images -a -q)
刪除容器
刪除一個(gè)或多個(gè)特定容器
使用帶有 -a 標(biāo)志的 docker ps 命令來定位你想要?jiǎng)h除的容器的名稱或 ID:
查找容器:
docker ps -a
刪除容器:
docker rm ID_or_Name ID_or_Name
退出時(shí)刪除容器
如果你在創(chuàng)建容器時(shí)就知道一旦完成就不想保留它,可以運(yùn)行 docker run --rm 來在容器退出時(shí)自動(dòng)刪除它:
運(yùn)行并刪除:
docker run --rm image_name
刪除所有已退出的容器
你可以使用 docker ps -a 并根據(jù)它們的狀態(tài)篩選容器:created、restarting、running、paused 或 exited。要查看已退出容器的列表,請使用 -f 標(biāo)志基于狀態(tài)進(jìn)行篩選。確認(rèn)想要?jiǎng)h除這些容器后,使用 -q 將 ID 傳遞給 docker rm 命令:
查找容器:
docker ps -a -f status=exited
刪除容器:
docker rm $(docker ps -a -f status=exited -q)
使用多個(gè)過濾器刪除容器
Docker 過濾器可以通過重復(fù)過濾標(biāo)志并添加額外的值來組合。這將生成符合任一條件的容器列表。例如,如果你想刪除標(biāo)記為 created(使用無效命令運(yùn)行容器時(shí)可能出現(xiàn)的狀態(tài))或 exited 的所有容器,你可以使用兩個(gè)過濾器:
查找容器:
docker ps -a -f status=exited -f status=created
刪除容器:
docker rm $(docker ps -a -f status=exited -f status=created -q)
根據(jù)模式刪除容器
你可以使用 docker ps 和 grep 的組合找到所有與某個(gè)模式匹配的容器。當(dāng)你確定擁有想要?jiǎng)h除的列表時(shí),可以使用 awk 和 xargs 將 ID 提供給 docker rm。注意,這些工具不是 Docker 提供的,也不一定在所有系統(tǒng)上可用:
查找容器:
docker ps -a | grep "pattern"
刪除容器:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
停止并刪除所有容器
你可以使用 docker ps 查看系統(tǒng)上的容器。添加 -a 標(biāo)志將顯示所有容器。當(dāng)你確定想要?jiǎng)h除它們時(shí),可以添加 -q 標(biāo)志來提供 ID 給 docker stop 和 docker rm 命令:
查找容器:
docker ps -a
刪除容器:
docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
刪除卷
刪除一個(gè)或多個(gè)特定卷
使用 docker volume ls 命令定位你希望刪除的卷的名稱。然后,你可以使用 docker volume rm 命令刪除一個(gè)或多個(gè)卷:
查找容器:
docker volume ls
刪除容器:
docker volume rm volume_name volume_name
刪除懸空卷
由于卷的存在是獨(dú)立于容器的,當(dāng)容器被移除時(shí),卷并不會(huì)自動(dòng)被同時(shí)移除。當(dāng)一個(gè)卷存在且不再連接到任何容器時(shí),它被稱為懸空卷。要定位這些卷以確認(rèn)你想要?jiǎng)h除它們,你可以使用帶有過濾器的 docker volume ls 命令,僅顯示懸空卷的結(jié)果。當(dāng)你對列表滿意時(shí),可以使用 docker volume prune 刪除它們所有:
查找卷:
docker volume ls -f dangling=true
刪除:
docker volume prune
刪除容器及其卷
如果你創(chuàng)建了一個(gè)未命名的卷,可以在刪除容器時(shí)同時(shí)用 -v 標(biāo)志刪除它。注意,這僅適用于未命名的卷。當(dāng)容器成功刪除后,會(huì)顯示其 ID。注意,沒有提及卷的移除。如果它是未命名的,它會(huì)在系統(tǒng)中默默被移除。如果它是命名的,它會(huì)默默地保留。
刪除容器及卷:
docker rm -v container_name
結(jié)論
本教程涵蓋了一些使用 Docker 刪除鏡像、容器和卷的常用命令。每個(gè)命令都可以使用許多其他的組合和標(biāo)志。
到此這篇關(guān)于一文教你如何清理Docker中閑置的鏡像,容器和卷的文章就介紹到這了,更多相關(guān)Docker清理鏡像 容器和卷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker-compose java.net.UnknownHostException問題
這篇文章主要介紹了docker-compose java.net.UnknownHostException問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05docker部署微信小程序自動(dòng)構(gòu)建發(fā)布和更新的詳細(xì)步驟
通過 Jenkins 和 Docker 部署微信小程序,并實(shí)現(xiàn)自動(dòng)構(gòu)建、發(fā)布和版本更新,主要涉及到幾個(gè)步驟,下面給大家分享docker部署微信小程序自動(dòng)構(gòu)建發(fā)布和更新的詳細(xì)步驟,感興趣的朋友一起看看吧2024-12-12Docker 配置固定IP及橋接的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker 配置固定IP和橋接的實(shí)現(xiàn)方法的相關(guān)資料,這里詳細(xì)介紹了Docker 的四種網(wǎng)絡(luò)模式及如何實(shí)現(xiàn)橋接的案例,需要的朋友可以參考下2016-10-10idea鏈接不上虛擬機(jī)的docker里的mongodb問題及解決
這篇文章主要介紹了idea鏈接不上虛擬機(jī)的docker里的mongodb問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06