Docker Registry — сервер для хранения и распространения Docker-образов. Образы загружаются командой docker push и скачиваются командой docker pull. Регистри — обязательный компонент CI/CD-пайплайна: Jenkins/GitLab CI собирает образ, пушит в регистри, сервер деплоя пуллит и запускает.
Как работает
Docker Registry реализует API на базе HTTP/HTTPS (Distribution API v2, RFC-подобная спецификация OCI). Образ хранится как набор слоёв (blobs) и манифест (JSON с описанием слоёв и конфигурации). При docker pull nginx:1.25: клиент запрашивает манифест образа nginx с тегом 1.25, получает список хешей слоёв, скачивает только отсутствующие слои.
Теги — мутабельные указатели на конкретный манифест. nginx:latest сегодня и через месяц может указывать на разные образы. Для воспроизводимых деплоев рекомендуется использовать неизменяемый SHA-256 digest: nginx@sha256:abc123....
Garbage Collection — механизм очистки несвязанных слоёв. В Docker Hub ненужные слои удаляются автоматически. В приватных реестрах (Harbor, Registry v2) GC запускается вручную или по расписанию.
Виды реестров
| Реестр | Тип | Особенности |
|---|---|---|
| Docker Hub | Публичный/приватный | 5 млн+ образов, rate limit для анонимов |
| GitHub Container Registry | Публичный/приватный | Интегрирован с GitHub Actions |
| GitLab Registry | Приватный | Встроен в GitLab CI/CD |
| AWS ECR | Приватный (облако) | Интеграция с EKS, IAM-авторизация |
| Harbor | Self-hosted | Open-source, сканирование уязвимостей |
| Distribution (Registry v2) | Self-hosted | Базовый open-source, легковесный |
История
Docker Hub запущен одновременно с Docker в 2013 году. Distribution (open-source реестр) выпущен Docker в 2015 году. OCI Distribution Spec (стандарт API реестра) утверждён в 2021 году — теперь любой совместимый реестр работает со стандартным Docker-клиентом. Harbor, созданный VMware в 2016 году, передан CNCF в 2018 году и стал de facto стандартом корпоративных реестров.
На что обращать внимание
Docker Hub с 2020 года ввёл rate limiting для анонимных пуллов: 100 pull/6ч с одного IP. На CI/CD-серверах это приводит к ошибкам. Решение: авторизоваться в Docker Hub (docker login) или использовать зеркало (mirror). В России Docker Hub периодически испытывает проблемы с доступностью — рекомендуется иметь приватный реестр или зеркало на собственном VPS.
Self-hosted Docker registry
Развернуть приватный реестр на VPS: docker run -d -p 5000:5000 registry:2. Для production добавьте HTTPS (обязательно — Docker не пушит в HTTP-реестр без явного указания insecure-registries), аутентификацию через htpasswd и хранение образов на S3 или NFS. Популярные self-hosted альтернативы Docker Hub: Harbor (CNCF, с vulnerability scanning, RBAC), Nexus Repository, GitLab Container Registry (если используете GitLab). Размер хранилища: образы nginx ~50 МБ, PHP — ~80 МБ, полный stack — 500 МБ — 2 ГБ типично.