Как опубликовать Docker‑образ в Docker Registry

Что такое Docker Registry
Docker Registry — это система хранения и распространения Docker‑образов. Каждый образ может иметь несколько версий, отличающихся тегами. Реестр позволяет пользователям загружать (pull) и отправлять (push) образы, обеспечивая онлайн‑копию приложения и способ делиться им с другими.
Короткое определение: Docker Registry — удалённое хранилище Docker‑образов с поддержкой тегов, прав доступа и метаданных.
Почему стоит использовать Docker Registry
Docker Hub — самый распространённый публичный реестр. Это продукт компании Docker, который поддерживает публичные и приватные репозитории, автоматические сборки и интеграцию с системами контроля версий. Docker Engine по умолчанию взаимодействует с Docker Hub, а CI/CD‑процессы легко настраиваются для автоматической публикации образов.
Важно: публичные репозитории доступны всем, приватные — по доступу. Docker Hub даёт один бесплатный приватный репозиторий и множество публичных.
Быстрая проверка перед началом
Перед операцией убедитесь, что на локальной машине установлены:
- Docker CLI (версия совместима с вашим окружением)
- Учётная запись на Docker Hub
- Доступ в интернет и достаточное место на диске для образа
Создание аккаунта и репозитория на Docker Hub
- Перейдите на сайт Docker Hub и зарегистрируйте аккаунт.
- После входа нажмите «Create repository», укажите Name и Description и выберите Public или Private.
Совет: используйте короткие имена репозиториев в формате username/repo, например myuser/myapp.
Шаг 1 — скачать тестовый образ (pull)
Для проверки можно скачать официальный образ Ubuntu:
# Скачиваем официальный образ Ubuntu
docker pull ubuntuЭто официальный образ, удобный для теста. Далее мы подготовим и отправим его в свой репозиторий.
Шаг 2 — пометить образ (tag)
Перед отправкой образа в удалённый репозиторий локальный образ должен иметь имя в формате registry/namespace/repo:tag. Для Docker Hub достаточно username/repo:tag.
Пример команды:
# Переименование (tag) локального образа
docker tag ubuntu:latest sandra35/testrepo:latestПосле выполнения вы должны увидеть новый тег среди локальных образов:
docker images
# Вывод покажет sandra35/testrepo:latestШаг 3 — отправка образа (push)
Отправьте помеченный образ в реестр командой:
docker push sandra35/testrepo:latestУспешная загрузка выглядит как список слоёв, отправленных на сервер. После завершения обновите страницу репозитория в браузере — образ появится в списке.
Поздравляем — образ размещён в Docker Registry. Теперь любой, у кого есть доступ, может выполнить docker pull вашего образа.
Проверка и отладка
Если образ не виден в Docker Hub:
- Убедитесь, что вы вошли в Docker CLI: docker login
- Проверьте правильность тега и имени репозитория
- Убедитесь, что push завершился без ошибок (сетевая ошибка, auth error)
Важно: если репозиторий приватный, другие пользователи должны иметь права доступа или использовать docker login перед pull.
Типичные ошибки и как их исправлять
- Ошибка «unauthorized: authentication required»: выполните docker login и повторите push.
- Ошибка «name unknown»: проверьте формат имени — должно быть username/repo:tag.
- Сетевые тайм‑аута: повторите команду или проверьте интернет/прокси.
Рекомендации по безопасности
- Приватные образы используйте для закрытых приложений. Ограничьте доступ по командам команды или организациям.
- Никогда не включайте секреты (ключи, пароли) прямо в Dockerfile. Используйте секреты CI/CD или Docker Secrets.
- Используйте подписывание образов и сканирование уязвимостей (Docker Hub и сторонние инструменты).
Модель мышления: что происходит при push
- CLI сравнивает локальные слои образа с теми, что уже есть в реестре.
- Загружаются только отсутствующие слои — это экономит трафик.
- После загрузки слоёв реестр обновляет метаданные и привязывает тег к набору слоёв.
Эта модель помогает понять, почему повторный push того же образа часто идёт быстро.
Критерии приёмки
- Образ доступен через docker pull username/repo:tag
- Тег указан корректно и соответствует версии приложения
- Для приватных репозиториев права доступа настроены
- CI/CD собирает и публикует образ по требуемому триггеру
Чек‑лист перед публикацией
- Выполнен docker login
- Образ успешно протестирован локально
- Образ промечен (docker tag) в формате username/repo:tag
- Размер образа оптимизирован (меньше — лучше)
- Нет секретов в образе
- Права доступа к репозиторию настроены
Мини‑методология для CI/CD
- Собирать образ в чистом окружении.
- Прогонять тесты и сканирование уязвимостей.
- Пропустить сборку, если тесты не пройдены.
- Присвоить семантический тег (например, vX.Y.Z или sha‑хеш).
- Выполнить docker push и оповестить команду.
SOP: Быстрая инструкция для разработчика
- docker pull base_image
- Собрать образ: docker build -t myapp:dev .
- Протестировать локально
- docker tag myapp:dev username/repo:tag
- docker login
- docker push username/repo:tag
- Проверить в Docker Hub
Диаграмма принятия решения (Mermaid)
flowchart TD
A[Начать] --> B{Есть Docker Hub аккаунт?}
B -- Да --> C{Создан репозиторий?}
B -- Нет --> D[Зарегистрироваться на Docker Hub]
D --> C
C -- Нет --> E[Создать репозиторий]
C -- Да --> F[Подготовить локальный образ]
F --> G[docker tag]
G --> H[docker login]
H --> I[docker push]
I --> J[Проверить репозиторий]
J --> K[Готово]Кому это полезно
- Разработчикам, которые хотят публиковать образы для тестирования
- DevOps‑инженерам, настраивающим CI/CD
- Командам, распределяющим контейнерные приложения между средами
Когда этот подход не сработает
- Если требуется локальный приватный реестр (требуется self‑hosted registry)
- При очень строгих политик безопасности (нужны дополнительные механизмы подписи и контроля)
Альтернатива: использовать self‑hosted registry (например, Harbor или собственного Docker Registry) для полного контроля над данными.
Краткое резюме
Docker Registry (например, Docker Hub) — стандартный способ хранения и распространения Docker‑образов. Процесс публикации включает регистрацию, создание репозитория, пометку образа (tag) и отправку (push). Следуйте чек‑листу и практикам безопасности, чтобы избежать утечек секретов и проблем с доступом.
Важное: размеры образов влияют на время загрузки и стоимость трафика. Оптимизируйте слои и удаляйте ненужные зависимости.
Глоссарий (одно предложение)
- Образ: упакованная файловая система приложения и его зависимости.
- Тег: читаемое имя версии образа (например, latest или v1.0.0).
- Репозиторий: коллекция образов с разными тегами.
- Push: отправка образа в реестр.
- Pull: загрузка образа из реестра.
Похожие материалы
Проверка версии Python на Windows, Mac и Linux
Режим планшета Windows 10: включение и настройка
Освободить память в Windows через Диспетчер задач
Организация учебных материалов в Delicious
Как организовать каталог Lightroom