Какие инструменты вы использовали для сборки Docker-образов?

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

Ответ

Основным инструментом был Docker Engine с Dockerfile. Для сложных сценариев и CI/CD использовал дополнительные инструменты.

1. Docker Build/Buildx:

# Многоэтапная сборка для уменьшения размера образа
FROM golang:1.19-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./ 
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/main .

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
  • docker buildx использовал для сборки мульти-архитектурных образов (amd64, arm64) и кэширования слоёв в реестре.

2. Kaniko: Ключевой инструмент для безопасной сборки внутри Kubernetes (не требует демона Docker и привилегированного режима). Интегрировал его в GitLab CI и ArgoCD.

# GitLab CI .gitlab-ci.yml этап
build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:v1.9.0
    entrypoint: [""]
  script:
    - /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"

3. Для проверки безопасности: Интегрировал Trivy или Grype в пайплайн для сканирования образов на уязвимости перед пушем в реестр.

4. Реестры: Работал с Docker Hub, GitHub Container Registry (GHCR), AWS ECR и Harbor (для on-prem).