Средний ~20 мин чтения

Реестры образов и деплой

Урок 5 из 6 в курсе Docker для разработчика

Реестры образов и деплой

реестр — централизованное хранилище Docker-образов; деплой — это pull образа на сервер и запуск контейнера

Почему это важно: без реестра образы нельзя передать серверу или CI/CD. Понимание тегирования образов — основа любого деплоя

Главная идея

docker push отправляет образ в реестр с тегом; сервер делает docker pull и запускает контейнер из того же образа

Как это выглядит на практике

  1. docker build -t myapp:v1.2.0 . — сборка образа с семантическим тегом.
  2. docker tag myapp:v1.2.0 registry.example.com/myapp:v1.2.0 — полное имя для реестра.
  3. docker push registry.example.com/myapp:v1.2.0 — отправка в реестр.
  4. На сервере: docker pull registry.example.com/myapp:v1.2.0 && docker run ... — деплой.
  5. В CI/CD: автоматическая сборка + push при каждом коммите в main.

Что происходит под капотом

  • Реестр хранит образы по слоям; уже загруженные слои не передаются повторно.
  • docker manifest inspect показывает манифест образа: список слоёв и метаданные.
  • Docker Hub — публичный реестр; GitHub Container Registry (ghcr.io), AWS ECR, GCP Artifact Registry — приватные.
  • latest — просто тег по умолчанию, не гарантирует последнюю стабильную версию. Используйте семантическое версионирование.
  • docker buildx — multi-platform сборка: одна команда собирает образ для linux/amd64 и linux/arm64.

Типичные ошибки и заблуждения

  • Ошибка: latest — всегда последняя версия. latest — обычный тег, который нужно явно обновлять.
  • Ошибка: реестр — только Docker Hub. AWS ECR, GitHub Container Registry, GitLab Registry — стандартные варианты в enterprise.
  • Ошибка: тег v1.0.0 неизменен. Тег можно перезаписать. Только digest (sha256:...) гарантирует конкретный образ.
  • Ошибка: docker push всегда отправляет весь образ. Передаются только новые слои.

Ключевые выводы

  • Тегируйте образы семантически: v1.2.0, не latest.
  • Реестр — мост между CI/CD и продакшен-серверами.
  • Слои переиспользуются: push/pull передаёт только изменения.
  • Digest (sha256:...) гарантирует воспроизводимость деплоя.

Термины урока

Registry: сервис хранения Docker-образов (Docker Hub, ECR, ghcr.io).
Tag: человекочитаемый идентификатор версии образа (v1.0.0, latest, main).
Digest: неизменяемый SHA256-хэш манифеста образа.
docker push: отправка образа в реестр.
docker pull: загрузка образа из реестра.

Связь с работой backend-разработчика

Стандартный деплой: CI собирает образ → pushит в реестр с тегом коммита → сервер pullит образ → docker run. Это воспроизводимо, откатываемо и автоматизируемо.

Мини-разбор реальной ситуации

Команда деплоит через rsync и ручной запуск. Откат занимает 30 минут. С реестром и тегами: docker pull myapp:v1.1.0 && docker run — откат любой версии за 30 секунд. История образов в реестре — история деплоев.

Что запомнить

  • Тег = версия; используй семантическое версионирование.
  • latest не гарантирует ничего — явно указывай версию в продакшене.
  • Реестр делает деплой воспроизводимым и откатываемым.

Итог

Реестр образов — связующее звено между разработкой и продакшеном. Правильное тегирование — основа безопасного и предсказуемого деплоя.