linux清理docker占用的磁盘空间

用了Docker,好处挺多的,但是有一个不大不小的问题,它会一不小心占用太多磁盘,这就意味着我们必须及时清理。

作为一个有信仰的技术公司,我们Fundebug的后台采用了酷炫的全Docker化架构,所有服务,包括数据库都运行在Docker里面。这样做当然不是为了炫技,看得清楚的好处还是不少的:
所有服务器的配置都非常简单,只安装了Docker,这样新增服务器的时候要简单很多。
可以非常方便地在服务器之间移动各种服务,下载Docker镜像就可以运行,不需要手动配置运行环境。
开发/测试环境与生产环境严格一致,不用担心由于环境问题导致部署失败。

至少,上线这一年多来,Docker一直非常稳定,没有出什么问题。但是,它有一个不大不小的问题,会比较消耗磁盘空间。

如果Docker一不小心把磁盘空间全占满了,你的服务也就算玩完了,因此所有Docker用户都需要对此保持警惕。当然,大家也不要紧张,这个问题还是挺好解决的。

  1. Docker System命令

docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system df

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              147                 36                  7.204GB             3.887GB (53%)
Containers          37                  10                  104.8MB             102.6MB (97%)
Local Volumes       3                   3                   1.421GB             0B (0%)
Build Cache                                                 0B                  0B

可知,Docker镜像占用了7.2GB磁盘,Docker容器占用了104.8MB磁盘,Docker数据卷占用了1.4GB磁盘。

docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。

执行docker system prune -a命令之后,Docker占用的磁盘空间减少了很多:
docker system df

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              10                  10                  2.271GB             630.7MB (27%)
Containers          10                  10                  2.211MB             0B (0%)
Local Volumes       3                   3                   1.421GB             0B (0%)
Build Cache                                                 0B                  0B
  1. 手动清理Docker镜像/容器/数据卷
    对于旧版的Docker(版本1.13之前),是没有Docker System命令的,因此需要进行手动清理。这里给出几个常用的命令:

删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ’ ’ -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像):
docker rmi $(docker images | grep “^” | awk “{print $3}”)

删除所有dangling数据卷(即无用的Volume):
docker volume rm $(docker volume ls -qf dangling=true)

你可能感兴趣的:(docker,linux,运维)