# Изменено: 2026-03-07 # Multi-stage build для sless оператора. # Stage 1: сборка бинаря (golang:1.23-alpine) # Stage 2: минимальный образ (alpine:3.19, не distroless — нужен ca-certificates для S3/HTTPS) FROM golang:1.25-alpine AS builder ARG TARGETOS ARG TARGETARCH WORKDIR /workspace COPY go.mod go.mod COPY go.sum go.sum RUN go mod download # Копируем весь исходный код (включая internal/ — там основная логика) COPY main.go main.go COPY api/ api/ COPY controllers/ controllers/ COPY internal/ internal/ COPY migrations/ migrations/ RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go FROM alpine:3.19 # ca-certificates нужны для TLS (S3 HTTPS, DockerHub) RUN apk add --no-cache ca-certificates WORKDIR / COPY --from=builder /workspace/manager . # migrations нужны при старте — оператор читает SQL файлы для инициализации БД COPY migrations/ migrations/ # Запускаем от непривилегированного пользователя USER 65532:65532 ENTRYPOINT ["/manager"]