Какими командами Docker ты собирал образы?

«Какими командами Docker ты собирал образы?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основная команда для сборки — docker build. Вот типичные сценарии её использования:

  • Базовая сборка: docker build -t myapp:latest . — собирает образ из Dockerfile в текущей директории и присваивает ему тег.
  • Указание контекста и Dockerfile: docker build -f ./docker/prod.Dockerfile . — если Dockerfile имеет нестандартное имя или расположение.

Ключевые флаги для оптимизации и контроля:

  • --no-cache — принудительная сборка без использования кеша слоёв. Использую, когда нужно гарантировать свежесть всех зависимостей (например, apt-get update).
  • --build-arg — передача переменных в процесс сборки. Полезно для условной логики или передачи секретов (с осторожностью).
    docker build --build-arg VERSION=1.2.0 -t myapp:$VERSION .
  • --target — в многоэтапных сборках (multi-stage builds) позволяет остановиться на определённой стадии. Это отлично подходит для извлечения только артефактов сборки (бинарников) в финальный образ.

    # Dockerfile
    FROM golang:alpine AS builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp .
    
    FROM alpine:latest
    COPY --from=builder /app/myapp /usr/local/bin/
    CMD ["myapp"]
    # Можно собрать только стадию builder для тестирования
    docker build --target builder -t myapp:builder .

    После сборки проверяю список образов командой docker images и часто отправляю в registry: docker push myrepo/myapp:latest.