Благодаря большому комментарию @Rekovni моя проблема кое-как решена.
Первый : Огромное количество используемого дискового пространства в Docker Images было связано с ошибкой в Gitlab / DockerРеестр.Перейдите по ссылке из комментария Рековни под моим вопросом.
Второй : В его ссылке также есть экспериментальный инструмент , который разрабатывается GitLab.В нем перечислены и при необходимости удаляются эти старые неиспользуемые слои Docker (связанные с ошибкой).
Третий : Если кто-то хочет сделать свое дело, я собрал довольно уродливый скрипт, в котором перечислено изображениеразмер для каждого репо:
#!/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, написанный выше.Вы можете использовать некрасивый сценарий так, как вам нравится, но я не несу никакой ответственности.