使用docker容器技术的好处:

  • 所有主机的配置都非常简单,只需要安装Docker,这样新增主机的时候要简单很多。

  • 可以非常方便地在不同主机之间迁移各种服务,下载Docker镜像就可以运行,不需要手动配置运行环境。

  • 开发/测试环境与生产环境严格一致,不用担心由于环境问题导致部署失败。

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


1. docker system命令

先查看本地文件系统的磁盘状况

# df -h
  • docker system df

docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
这里写图片描述

可知,Docker镜像占用了14.88GB磁盘,Docker容器占用了447MB磁盘,Docker数据卷占用了0GB磁盘,build缓存占用了0GB磁盘。

  • docker system prune

清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

# docker system prune

删掉所有没有容器使用的Docker镜像,清理得更加彻底

# docker system prune -a

注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了,所以使用之前一定要想清楚。

查看Docker的磁盘使用情况

# docker system df

查看清理之后的磁盘状态

# df -h


2. 手动清理Docker镜像/容器/数据卷

对于旧版的Docker(版本1.13之前),是没有docker system命令的,因此需要进行手动清理,这里给出几个常用的命令。

  • 停止所有运行的容器
# docker stop $(docker ps -a | awk '{print $1}')   
  • 删除所有关闭的容器
# docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
  • 删除所有dangling镜像(即无tag的镜像):
# docker rmi $(docker images | awk "{print $2}" | grep "^<none>")
  • 删除所有dangling数据卷(即无用的volume):
# docker volume rm $(docker volume ls -qf dangling=true)

查看清理之后的磁盘状态

# df -h


3. 重启Docker

还有一次,当我清理了镜像、容器以及数据卷之后,发现磁盘空间并没有减少。根据Docker disk usage提到过的建议,我重启了Docker,发现磁盘使用率从83%降到了19%。根据高手指点,这应该是与内核3.13相关的BUG,导致Docker无法清理一些无用目录:

我查看了一下内核版本,发现真的是3.13:

# uname -r
3.13.0-86-generic

如果你的内核版本也是3.13,而且清理磁盘没能成功,不妨重启一下Docker。当然,这个晚上操作比较靠谱。

4. 参考文章

http://blog.csdn.net/B9Q8e64lO6mm/article/details/79070442

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐