docker的容器和镜像的清理

Docker用户会在使用docker一段时间后发现宿主机的磁盘很容易就快被占满,而且手动docker rmi [imgName]彷佛并不能释放磁盘,貌似想删掉的镜像依然在宿主机中,下面针对这一问题提出一些解决方案。docker

Docker空间占用查看

1.13版本后Docker提供给了一些System命令,例如df命令查看Docker占用分布:ruby

$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 3 0 5.373GB 5.373GB (100%) Containers 0 0 0B 0B Local Volumes 0 0 0B 0B 
$ docker system df -v 命令能够进一步查看空间占用细节,以肯定是哪一个镜像、容器或本地卷占用太高空间

清理方法

1 自动清理命令

docker system prune可对空间进行自动清理。
该命令所清理的对象以下:网络

已中止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
全部悬空的镜像spa

对于上面提到的一些镜像或容器的状态,须要咱们内心有点数:code

已使用的镜像:指全部已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的全部容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像
悬空镜像(dangling image):未配置任何Tag(也就是没法被引用)的镜像。一般是因为镜像编译过程当中未指定-t参数配置Tag致使的。对象

docker system prune后能够加额外的参数,如:
docker system prune -a : 一并清除全部未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息。token

另外除了system级别的,还有针对容器或是镜像级别的删除命令:string

docker image prune:删除悬空的镜像。

docker container prune:删除无用的容器。
      --默认状况下docker container prune命令会清理掉全部处于stopped状态的容器 --若是不想那么残忍通通都删掉,也可使用--filter标志来筛选出不但愿被清理掉的容器。例子:清除掉全部停掉的容器,但24内建立的除外: --$ docker container prune --filter "until=24h" docker volume prune:删除无用的卷。 docker network prune:删除无用的网络 

手动清除

对于悬空镜像和未使用镜像可使用手动进行个别删除:
一、删除全部悬空镜像,不删除未使用镜像:
docker rmi $(docker images -f "dangling=true" -q)it


二、删除全部未使用镜像和悬空镜像
docker rmi $(docker images -q)io


三、清理卷
若是卷占用空间太高,能够清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):
删除全部未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)


四、容器清理
若是发现是容器占用太高的空间,能够手动删除一些:
删除全部已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
删除全部状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

相关文章
相关标签/搜索