Container registry

Материал из llmdocs — справочник разработчика
Container registry
СтандартOCI Distribution Specification (1.0 — 2021)
ПротоколHTTP API поверх TLS
Адресация образареестр/пространство/имя:тег или @sha256:дайджест
ПубличныеDocker Hub, GHCR, Quay.io, Amazon ECR Public
ОблачныеAmazon ECR, Google Artifact Registry, Azure ACR, Yandex Container Registry
СвоиHarbor, GitLab Container Registry, Distribution (registry:2), Zot

Container registry (реестр контейнеров) — сервер, на котором хранятся образы контейнеров и с которого их скачивают. Команда docker push отправляет собранный образ в реестр, а docker pull — или Kubernetes при запуске пода — забирает его оттуда. Реестр — связующее звено между сборкой в CI/CD и запуском в продакшене: CI публикует образ с версией, а кластер разворачивает именно её.

Как устроен

Реестр реализует HTTP API, стандартизированный как OCI Distribution Specification (на основе Docker Registry HTTP API V2).[1] Образ хранится не как один файл, а как набор объектов, адресуемых по хешу SHA-256 (content-addressable storage):

  • блобы — слои файловой системы (tar.gz) и конфигурация;
  • манифест — JSON со списком слоёв и их дайджестов;
  • индекс (manifest list) — список манифестов для разных архитектур (linux/amd64, linux/arm64).

Одинаковые слои хранятся один раз и не скачиваются повторно, если уже есть на машине. Основные операции API: GET /v2/<имя>/manifests/<ссылка>, GET /v2/<имя>/blobs/<дайджест>, загрузка блобов через POST/PUT.

Имена образов

Полное имя образа:

ghcr.io/acme/api:1.4.2
└─реестр─┘└─репозиторий─┘└тег┘

ghcr.io/acme/api@sha256:9f86d081884c7d65...   # по дайджесту

Если реестр не указан, Docker подставляет docker.io, а для официальных образов — ещё и library/ (nginx = docker.io/library/nginx). Тег — изменяемая метка: latest или 1.4 сегодня и завтра могут указывать на разные образы. Дайджест неизменен, поэтому для воспроизводимых развёртываний образы фиксируют по нему или используют неизменяемые теги с версией и хешем коммита.

Популярные реестры

Реестр Особенности
Docker Hub реестр по умолчанию, официальные образы; ограничения частоты скачивания для анонимных и бесплатных пользователей[3]
GitHub Container Registry (ghcr.io) привязан к репозиториям и GitHub Actions, бесплатен для публичных образов[4]
Quay.io реестр Red Hat со сканированием уязвимостей
Amazon ECR, Google Artifact Registry, Azure ACR интеграция с IAM и кластерами своего облака
GitLab Container Registry встроен в GitLab и GitLab CI
Harbor open source, проект CNCF: проекты, RBAC, сканирование, репликация, прокси-кэш[5]
Distribution (registry:2), Zot минимальные самостоятельные реестры

Работа с реестром

docker login ghcr.io -u USER --password-stdin < token.txt
docker build -t ghcr.io/acme/api:1.4.2 .
docker push ghcr.io/acme/api:1.4.2

# мультиархитектурный образ
docker buildx build --platform linux/amd64,linux/arm64 \
  -t ghcr.io/acme/api:1.4.2 --push .

# свой реестр для тестов
docker run -d -p 5000:5000 --name registry registry:2

Утилиты skopeo и crane копируют образы между реестрами и смотрят манифесты без скачивания слоёв. Чтобы Kubernetes скачивал образы из приватного реестра, создают секрет типа docker-registry и указывают его в imagePullSecrets пода (см. ConfigMap и Secret).

Безопасность

  • Сканирование уязвимостей — Trivy, Grype или встроенные сканеры Harbor, ECR и Quay проверяют пакеты в слоях по базам CVE.
  • Подпись образов — cosign из проекта Sigstore подписывает образ по дайджесту; подпись хранится в том же реестре, а политика в кластере (Kyverno, policy-controller) не пускает неподписанные образы.[6]
  • SBOM и аттестации — список компонентов и сведения о сборке прикладываются к образу как OCI-артефакты.
  • Секреты — пароли и ключи не должны попадать в слои образа: даже удалённый в следующем слое файл остаётся в истории (решение — многоэтапная сборка и секреты BuildKit).

Эксплуатация

Реестр быстро растёт: каждый пуш оставляет слои. Нужны политики хранения (удалять теги старше N дней, оставлять последние M версий) и сборка мусора для неиспользуемых блобов. Прокси-кэш (pull-through cache) перед Docker Hub снижает зависимость от внешнего сервиса и его лимитов. Помимо образов, реестры OCI сегодня хранят Helm-чарты (helm push oci://...), WebAssembly-модули и даже веса моделей машинного обучения.

См. также

Источники

  1. OCI Distribution Specification
  2. Docker Docs — Docker Hub
  3. Docker Docs — Usage and rate limits
  4. GitHub Docs — Working with the Container registry
  5. Harbor — официальный сайт
  6. Sigstore — cosign