首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GitLab:如何列出大小为大小的注册表容器

GitLab:如何列出大小为大小的注册表容器
EN

Stack Overflow用户
提问于 2018-12-05 09:08:11
回答 2查看 4.4K关注 0票数 2

我有一个自动升级的GitLab CE Omnibus安装(11.5.2版本)正在运行,包括容器注册表。现在,承载所有这些容器所需的磁盘大小增长得相当快。作为管理员,我想列出这个注册表中的所有Docker图像,包括它们的大小,这样我就可以让它们被删除。

也许我找的不够努力,但目前,我在GitLab的管理小组中找不到东西。在创建脚本以比较repositoriesblobs目录在/var/opt/gitlab/gitlab-rails/shared/registry/docker/registry/v2中的奇怪链接,然后根据存储库聚合大小之前,我想问一问:

是否有一些CLI命令,甚至是对注册表的curl调用来获取我想要的信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-27 13:22:14

现在应该将目前的答案标记为已被否决。

如注释中所述,如果您的存储库是嵌套的,您将错过项目。此外,根据经验,它似乎低估了它所找到的存储库所使用的磁盘空间。它还将跳过用Gitlab 14和更高版本创建的存储库。

通过使用现在可用的Gitlab控制台:sheet.html#registry-disk-space-usage-by-project,我意识到了这一点。

您可以修改该命令,以增加它将发现的项目数量,因为它只查看最后100个项目。

票数 2
EN

Stack Overflow用户

发布于 2018-12-10 08:27:15

更新:到现在为止,这个答案已经被废弃了。请直接看到GitLab的Rails控制台中内置的解决方案的公认答案。

原文:

感谢@Rekovni的评论,我的问题已经解决了。

First:Docker使用了大量磁盘空间,这是由于Gitlab/Docker中的一个错误造成的。请按照Rekovni在我的问题下面的评论链接。

第二:在他的链接中,还有由GitLab开发的实验工具。它列出并可选地删除那些旧的未使用的Docker层(与bug相关)。

Third:如果有人想做自己的事情,我会黑出一个非常难看的脚本,其中列出了每个回购程序的图像大小:

代码语言:javascript
复制
#!/usr/bin/env python3
# coding: utf-8

import os
from os.path import join, getsize
import subprocess

def get_human_readable_size(size,precision=2):
    suffixes=['B','KB','MB','GB','TB']
    suffixIndex = 0
    while size > 1024 and suffixIndex < 4:
        suffixIndex += 1
        size = size/1024.0
    return "%.*f%s"%(precision,size,suffixes[suffixIndex])


registry_path = '/var/opt/gitlab/gitlab-rails/shared/registry/docker/registry/v2/'
repos = []

for repo in os.listdir(registry_path + 'repositories'):
    images = os.listdir(registry_path + 'repositories/' + repo)
    for image in images:
        try:
            layers = os.listdir(registry_path + 'repositories/{}/{}/_layers/sha256'.format(repo, image))
            imagesize = 0
            # get image size
            for layer in layers:
                # get size of layer
                for root, dirs, files in os.walk("{}/blobs/sha256/{}/{}".format(registry_path, layer[:2], layer)):
                     imagesize += (sum(getsize(join(root, name)) for name in files))
            repos.append({'group': repo, 'image': image, 'size': imagesize})
        # if folder doesn't exists, just skip it
        except FileNotFoundError:
            pass

repos.sort(key=lambda k: k['size'], reverse=True)
for repo in repos:
    print("{}/{}: {}".format(repo['group'], repo['image'], get_human_readable_size(repo['size'])))

但是请注意,它确实是静态的,没有列出图像的特定标记,也没有考虑到其他图像也可能使用某些层。但是它会给你一个粗略的估计,以防你不想使用上面写的Gitlab的工具。你可以用你喜欢的丑陋剧本,但我不承担任何责任。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53628660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档