清理Docker 镜像、容器和卷
清除所有未使用的镜像、容器、卷和网络
Docker 提供了一个命令来清理的资源——images, containers, volumes, and networks:
$ docker system prune
要额外删除任何已停止的容器和所有未使用的images,添加-a参数到命令中:
$ docker system prune -a
删除Docker Image
使用docker images
加上-a
参数来定位要删除的Image的ID。 之后将ID传递给docker rmi
:
List:
docker images -a
Remove:
docker rmi <ImageID> <ImageID>
删除 dangling images
当build docker 镜像的时候,有时会遇到用一个甚至多个中间层镜像,这会一定程度上减少最终打包出来 docker 镜像的大小,但是会产生一些tag 为 none 的无用镜像,也称为悬挂镜像 (dangling images)
列出所有的 dangling images:
docker images -f "dangling=true"
删除所有的 dangling images:
docker rmi $(docker images -f "dangling=true" -q)
删除所有Image
使用docker images
添加-a
可以列出系统上所有的docker镜像, 如果确定要将他们全部删除, 可以使用-q
参数将ImageID传给docker rmi
List:
docker images -a
Remove:
docker rmi $(docker images -a -q)
删除Container
使用docker ps
带有-a
标志的命令来定位要删除的容器的名称或 ID:
List:
docker ps -a
Remove:
docker rm <ID_or_Name> <ID_or_Name>
退出时移除容器
如果要临时创建一个容器, 并且运行完成后不再保留,可以运行docker run --rm
Run And Remove:
docker run --rm image_name
移除所有exited容器
您可以使用容器定位docker ps -a
并按其状态过滤它们:已创建、正在重新启动、正在运行、已暂停或已退出。要查看已退出容器的列表,请使用该-f
标志根据状态进行过滤。当您确认要删除这些容器时,使用-q
将 ID 传递给docker rm
命令。
List:
docker ps -a -f status=exited
Remove:
docker rm $(docker ps -a -f status=exited -q)
使用多个过滤器删除容器
Docker 过滤器可以通过使用附加值重复过滤器标志来组合。这将生成满足任一条件的容器列表。例如,如果您想删除所有标记为Created(使用无效命令运行容器时可能导致的状态)或Exited的容器,您可以使用两个过滤器:
List:
docker ps -a -f status=exited -f status=created
Remove:
docker rm $(docker ps -a -f status=exited -f status=created -q)
停止并删除所有容器
使用docker ps
查看系统上所有运行的容器, 添加-a
参数显示系统上所有容器(包括exited状态的容器)。 添加-q
参数后将ID传给docker stop
和docker rm
停止不删除所有容器
List:
docker ps -a
Remove:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
删除一个或多个特定卷 - Docker 1.9 及更高版本
使用该docker volume ls
命令定位要删除的卷名或名称。然后您可以使用以下docker volume rm
命令删除一个或多个卷:
List:
docker volume ls
Remove:
docker volume rm volume_name volume_name
删除dangling卷 - Docker 1.9 及更高版本
由于卷的点是独立于容器而存在的,所以当一个容器被移除时,不会同时自动移除一个卷。当卷存在并且不再连接到任何容器时,它被称为悬垂卷。要找到它们以确认您要删除它们,您可以使用docker volume ls
带有过滤器的命令将结果限制为悬空体积。当您对列表感到满意时,您可以使用以下命令将它们全部删除docker volume prune
:
List:
docker volume ls -f dangling=true
Remove:
docker volume prune