Docker 容器與映象清理彙總
說明
由於我們使用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 指令碼進行清理的工作就好了。