zoukankan      html  css  js  c++  java
  • 如何清理Docker占用的磁盘空间?(转)

    1、

    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 占用的磁盘空间减少了很多:

    2、手动清理

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

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

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

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

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

    3. 限制容器的日志大小

    有一次,当我使用 1 与 2 提到的方法清理磁盘之后,发现并没有什么作用,于是,我进行了一系列分析。

    在 Ubuntu 上,Docker 的所有相关文件,包括镜像、容器等都保存在/var/lib/docker/目录中:

    du -hs /var/lib/docker/
    97G    /var/lib/docker/

    Docker 竟然使用了将近100GB磁盘,这也是够了。使用du命令继续查看,可以定位到真正占用这么多磁盘的目录:

    92G    /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53

    由docker ps可知,nginx 容器的 ID 恰好为a376aa694b22,与上面的目录/var/lib/docker/containers/a376aa694b22的前缀一致:

    docker ps
    CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
    a376aa694b22        192.168.59.224:5000/nginx:1.12.1            "nginx -g 'daemon off"   9 weeks ago         Up 10 minutes                           nginx

    因此,nginx 容器竟然占用了92GB的磁盘。进一步分析可知,真正占用磁盘空间的是 nginx 的日志文件。那么这就不难理解了。我们Fundebug每天的数据请求为百万级别,那么日志数据自然非常大。

    使用truncate命令,可以将 nginx 容器的日志文件“清零”:

    truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log

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

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

    重启 nginx 容器之后,其日志文件的大小就被限制在5GB,再也不用担心了~

    转自:https://blog.fundebug.com/2018/01/10/how-to-clean-docker-disk/

  • 相关阅读:
    美国大学排名之本科中最用功的学校top15
    PhpStorm (强大的PHP开发环境)2017.3.2 附注册方法
    获取地址栏的URL: PHP JS
    怎么给php下拉框默认选中
    在JS中使用全局变量
    原生和jQuery的ajax用法
    XAMPP重要文件目录及配置
    select获取下拉框的值 下拉框默认选中
    h5 时间控件问题,怎么设置type =datetime-local 的值
    JS截取字符串常用方法详细整理
  • 原文地址:https://www.cnblogs.com/zl1991/p/12362801.html
Copyright © 2011-2022 走看看