Docker - 如何分析容器的磁盘使用情况?

 傻缺缺的谭贱儿_452 发布于 2022-12-13 07:49

我已经搜索了一段时间,但找不到分析Docker容器/卷的磁盘使用情况的方法.

我可以看到Docker需要12GB的文件系统:

2.7G    /var/lib/docker/vfs/dir
2.7G    /var/lib/docker/vfs
2.8G    /var/lib/docker/devicemapper/mnt
6.3G    /var/lib/docker/devicemapper/devicemapper
9.1G    /var/lib/docker/devicemapper
12G     /var/lib/docker

但是,我怎么知道这是如何分布在容器上的呢?

我尝试通过运行附加到容器(新的v1.3命令)

docker exec -it  bash

然后运行'df -h'来分析磁盘使用情况.它似乎有效,但不适用于使用'volume-from'的容器.

例如,我使用MongoDB的仅数据容器,称为"mongo-data".

当我运行docker run -it --volumes-from mongo-data busybox,然后df -h在容器内部,它说安装在/data/db(我的'mongo-data'仅数据容器)上的文件系统使用11.3G,但是当我这样做时du -h /data/db,它说它只使用2.1G.

那么,我如何分析容器/卷磁盘的使用情况呢?或者,在我的情况下,我如何找出'mongo-data'容器大小?

非常感谢,

7 个回答
  • 1.13.0之后,Docker包含一个docker system df显示docker磁盘使用情况的新命令.

    $ docker system df
    TYPE            TOTAL        ACTIVE     SIZE        RECLAIMABLE
    Images          5            1          2.777 GB    2.647 GB (95%)
    Containers      1            1          0 B         0B
    Local Volumes   4            1          3.207 GB    2.261 (70%)
    

    显示有关空间使用情况的更多详细信息

    $ docker system df --verbose
    

    2022-12-13 07:54 回答
  • 要查看容器的文件大小,可以使用以下--size参数docker ps:

    docker ps --size
    

    2022-12-13 07:55 回答
  • 将此作为答案发布,因为我上面的评论被隐藏了:

    列出容器的大小:

    du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`
    

    列出容器卷的大小:

    docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
    

    编辑:列出所有正在运行的容器的大小和卷:

    for d in `docker ps -q`; do
        d_name=`docker inspect -f {{.Name}} $d`
        echo "========================================================="
        echo "$d_name ($d) container size:"
        sudo du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" $d`
        echo "$d_name ($d) volumes:"
        docker inspect -f "{{.Volumes}}" $d | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
    done
    

    注意:根据您的Docker文件系统更改'devicemapper'(例如'aufs')

    2022-12-13 07:56 回答
  • (这个答案没用,但是因为有些评论可能会留在这里)

    docker images将显示"虚拟大小",即包括所有较低层的总数.如果你有共享相同基本图像的容器,那么有些重复计算.

    文件

    2022-12-13 08:00 回答
  • 您可以使用

    docker history IMAGE_ID
    

    了解图像大小如何在其各个子组件之间分配。

    2022-12-13 08:01 回答
  • 我曾经docker stats $(docker ps --format={{.Names}}) --no-stream得到:

      CPU使用率,

      内存使用情况/分配给容器的总内存(可以使用docker run命令分配)

      记忆%

      块I / O

      净I / O

    2022-12-13 08:01 回答
  • 音量部分不再起作用,所以如果有人感兴趣,我只需更改上面的脚本:

    for d in `docker ps | awk '{print $1}' | tail -n +2`; do
        d_name=`docker inspect -f {{.Name}} $d`
        echo "========================================================="
        echo "$d_name ($d) container size:"
        sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f "{{.Id}}" $d`
        echo "$d_name ($d) volumes:"
        for mount in `docker inspect -f "{{range .Mounts}} {{.Source}}:{{.Destination}}                                                                                                                                                      
        {{end}}" $d`; do
            size=`echo $mount | cut -d':' -f1 | sudo xargs du -d 0 -h`
            mnt=`echo $mount | cut -d':' -f2`
            echo "$size mounted on $mnt"
        done
    done
    

    2022-12-13 08:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有