admin

如何清理Docker占用的磁盘空间

admin 虚拟化 2018-12-25 2594浏览 0

1. Docker System命令

docker占用了不少硬盘空间。还好Docker 1.13引入了解决方法,它提供了简单的命令来查看/清理Docker使用的磁盘空间。

[root@ecs-26ea-0002 ~]# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              8                   8                   2.578GB             0B (0%)
Containers          16                  16                  109.4MB             0B (0%)
Local Volumes       69                  2                   2.376GB             2.309GB (97%)
Build Cache

可知,Docker镜像占用了8G磁盘,Docker容器占用了16G磁盘,Docker数据卷占用了2.376GB磁盘。

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

docker system prune -a后磁盘减少了很多,效果很好!

[root@ecs-26ea-0002 ~]# docker system prune -a
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all images without at least one container associated to them
        - all build cache
Are you sure you want to continue? [y/N]

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

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

删除所有关闭的容器

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像)

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling数据卷(即无用的Volume)

docker volume rm $(docker volume ls -qf dangling=true)

3. 限制容器的日志大小

如果服务器额日志在容器内,没有被映射出来,可以进入docker目录(/var/lib/docker/)通过du -h --max-depth=1命令去排查哪个容器的日志比较大,通过echo或者truncate命令来情况日志

比如:

truncate -s 0 /var/lib/docker/containers/xxx/1.log
echo "" > /var/lib/docker/containers/xxx/1.log

当然,这个命令只是临时有作用,日志文件迟早又会涨回来。要从根本上解决问题,需要限制Nginx容器的日志文件大小。这个可以通过配置日志的max-size来实现,下面是Nginx容器的docker-compose配置文件:

nginx:
image: nginx:1.12.1
restart: always
logging:
driver: "json-file"
options:
  max-size: "5g"


注:以上所有操作如果磁盘没有释放,可尝试下重启docker!

版权声明

本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。