← Назад к вопросам

Как собрать, запушить в реджистри

2.3 Middle🔥 121 комментариев
#CI/CD и автоматизация#Docker и контейнеризация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сборка и публикация образа Docker: Практическое руководство

Для сборки и публикации образа в реестр контейнеров используется связка команд docker build и docker push. Вот детальное пошаговое руководство.

1. Подготовка Dockerfile

Основой является Dockerfile — инструкция по сборке. Пример минимального файла для приложения на Python:

# Используем официальный базовый образ
FROM python:3.11-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем зависимости и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем исходный код приложения
COPY src/ .

# Открываем порт и указываем команду запуска
EXPOSE 8080
CMD ["python", "app.py"]

2. Сборка образа

Выполните команду из директории с Dockerfile:

docker build -t my-app:latest .

Ключевые моменты сборки:

  • -t задаёт тег образа в формате имя:тег.
  • . указывает на текущий контекст сборки.
  • Для оптимизации используйте .dockerignore файл:
.git
__pycache__
*.log
.env

3. Тегирование для реестра

Перед публикацией образ нужно тегировать с указанием реестра:

docker tag my-app:latest registry.example.com/namespace/my-app:latest

Где:

  • registry.example.com — адрес вашего реестра (Docker Hub, GitLab Registry, Harbor)
  • namespace — ваше имя пользователя или название группы

4. Аутентификация в реестре

Для Docker Hub:

docker login

Для приватных реестров:

docker login registry.example.com
# Введите credentials при запросе

5. Публикация образа

docker push registry.example.com/namespace/my-app:latest

6. Продвинутые сценарии сборки

Для production-сборок используйте многоэтапную сборку:

# Этап сборки
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp

# Финальный этап
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Сборка: docker build -t my-app:prod --target builder .

7. Автоматизация в CI/CD пайплайне

Пример GitLab CI pipeline:

stages:
  - build
  - push

variables:
  IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $IMAGE_NAME .
    - docker push $IMAGE_NAME
  only:
    - main

8. Лучшие практики

  • Используйте семантическое версионирование тегов: my-app:1.2.3, my-app:latest
  • Подписывайте образы с помощью Docker Content Trust
  • Сканируйте на уязвимости: docker scan my-app:latest
  • Оптимизируйте размер образа: выбирайте минимальные базовые образы (Alpine, distroless)
  • Используйте layer caching: копируйте зависимости до кода приложения

9. Проверка результата

После публикации убедитесь, что образ доступен:

docker pull registry.example.com/namespace/my-app:latest
docker images | grep my-app

10. Управление образами в реестре

  • Просмотр образов: через веб-интерфейс или API реестра
  • Удаление старых образов: большинство реестров имеют политики retention
  • Репликация: настройте репликацию между регионами для ускорения доступа

Критически важные моменты:

  1. Не храните секреты в образах — используйте Docker Secrets или mounted volumes
  2. Всегда указывайте конкретные версии базовых образов, а не latest
  3. Регулярно обновляйте базовые образы для получения исправлений безопасности
  4. Настройте автоматические сборки при изменении кода в репозитории

Этот процесс составляет основу конвейера доставки контейнеризированных приложений и является фундаментальным навыком для DevOps-инженера.