Ответ
Основным инструментом был 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).