我有一个自动升级的GitLab CE Omnibus安装(11.5.2版本)正在运行,包括容器注册表。现在,承载所有这些容器所需的磁盘大小增长得相当快。作为管理员,我想列出这个注册表中的所有Docker图像,包括它们的大小,这样我就可以让它们被删除。
也许我找的不够努力,但目前,我在GitLab的管理小组中找不到东西。在创建脚本以比较repositories和blobs目录在/var/opt/gitlab/gitlab-rails/shared/registry/docker/registry/v2中的奇怪链接,然后根据存储库聚合大小之前,我想问一问:
是否有一些CLI命令,甚至是对注册表的curl调用来获取我想要的信息?
发布于 2022-06-27 13:22:14
现在应该将目前的答案标记为已被否决。
如注释中所述,如果您的存储库是嵌套的,您将错过项目。此外,根据经验,它似乎低估了它所找到的存储库所使用的磁盘空间。它还将跳过用Gitlab 14和更高版本创建的存储库。
通过使用现在可用的Gitlab控制台:sheet.html#registry-disk-space-usage-by-project,我意识到了这一点。
您可以修改该命令,以增加它将发现的项目数量,因为它只查看最后100个项目。
发布于 2018-12-10 08:27:15
更新:到现在为止,这个答案已经被废弃了。请直接看到GitLab的Rails控制台中内置的解决方案的公认答案。
原文:
感谢@Rekovni的评论,我的问题已经解决了。
First:Docker使用了大量磁盘空间,这是由于Gitlab/Docker中的一个错误造成的。请按照Rekovni在我的问题下面的评论链接。
第二:在他的链接中,还有由GitLab开发的实验工具。它列出并可选地删除那些旧的未使用的Docker层(与bug相关)。
Third:如果有人想做自己的事情,我会黑出一个非常难看的脚本,其中列出了每个回购程序的图像大小:
#!/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的工具。你可以用你喜欢的丑陋剧本,但我不承担任何责任。
https://stackoverflow.com/questions/53628660
复制相似问题