說明
由於我們使用Docker Swarm特性與Jenkins進行自動化部署升級服務,隨着不斷的升級會產生大量的未清理的老版本鏡像常駐在本地磁盤之中,而這些鏡像其實都已經沒什麼作用了,所以需要對其進行清理,所以本篇主要記錄一些清理的方式,以便查閱。
清理方式
官方其實給出了一個類似“一鍵清除”的方案,只需要一行命令既可以對所有未使用的容器與捲進行清理,但我發現此命令還是會存在某些缺陷,比如依然會有一些鏡像無法徹底清理,我個人建議還是手動處理較好。
官方做法 (不太推薦)
以下命令會強制執行清理操作,如果需要查看Docker耗費磁盤的信息,請使用 docker system df 進行查看。
docker system prune -f
- 1
手動做法(推薦做法)
清理鏡像
手動清理鏡像的操作我主要用到了一些格式化從操作,如:指定鏡像某個之前的TAG,然後再通過獨立過濾某個鏡像,等;更多格式化操作參考文檔:點擊這裏。
docker rmi \
$( \
docker images \
-f before='nh/backend-uat:91' \
-f reference="nh/backend-uat" \
-q \
) \
- 1
- 2
- 3
- 4
- 5
- 6
- 7
清理鏡像(使用TAG名稱)
docker rmi \
$( \
docker images \
-f before='nh/backend-uat:91' \
-f reference="nh/backend-uat" \
| awk '/?*backend-uat*/{print $1 ":" $2}' \
) \
- 1
- 2
- 3
- 4
- 5
- 6
- 7
參數
- before - 指定哪個TAG之前的所有鏡像
- reference - 過濾某個標識的鏡像
清理退出的容器
docker rm $(docker ps -q -f status=exited)
- 1
status取值範圍
- status=running
- status=exited
定時任務結合
手動方案操作可以結合定時任務進行定製化按需求清理,編寫 crontab 腳本進行清理的工作就好了。
參考資料
https://docs.docker.com/engine/reference/commandline/images/#filtering