前言
在docker生態中,可能會定時清理一些不必要或者不再使用的容器鏡像,釋放出資源空間,達到硬件服務資源的合理化利用。在清理的鏡像時,需要注意不能直接使用docker rmi <image-id>
命令進行刪除,因爲有的容器使用該鏡像已經被創建,甚至還處於run
狀態。正確的步驟應該是:先刪除容器,解開容器與鏡像間的依賴關係,確認後再刪除鏡像。
刪除容器
- 獲取容器ID
$ docker ps -a
CONTAINER_ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f897a9b2edaf mysql "docker-entrypoint.s…" 2 months ago Exited (0) 44 minutes ago walle-mysql
7abd9ec9d946 alenx/walle-web:2.1 "nginx -g 'daemon of…" 2 months ago Exited (0) 44 minutes ago walle-nginx
- 停止容器
$ docker stop <CONTAINER_ID>
- 刪除容器
$ docker rm <CONTAINER_ID>
刪除鏡像
- 獲取鏡像ID
$ docker images -a
REPOSITORY TAG IMAGE_ID CREATED SIZE
mysql latest ed1ffcb5eff3 3 months ago 456MB
alenx/walle-web 2.1 23fbcbdad6ce 11 months ago 118MB
如果刪除
untagged images
,可以使用命令docker images | grep "^<none>" | awk '{print $3}'
- 刪除鏡像
$ docker rmi <IMAGE_ID>
後記
這個過程其實蠻清晰的,主要是理清容器以及鏡像之間的依賴關係,其實也就是docker
的生命週期的兩部分:鏡像(image)+容器(container),然後問題就迎刃而解了。
docker生命週期的組成部分:鏡像 image+容器 container+倉庫 registry