Как собрать, запушить в реджистри
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сборка и публикация образа 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
- Репликация: настройте репликацию между регионами для ускорения доступа
Критически важные моменты:
- Не храните секреты в образах — используйте Docker Secrets или mounted volumes
- Всегда указывайте конкретные версии базовых образов, а не
latest - Регулярно обновляйте базовые образы для получения исправлений безопасности
- Настройте автоматические сборки при изменении кода в репозитории
Этот процесс составляет основу конвейера доставки контейнеризированных приложений и является фундаментальным навыком для DevOps-инженера.