43 lines
2.0 KiB
Docker
43 lines
2.0 KiB
Docker
# Изменено: 2026-04-04 — добавлена IoT поддержка: COPY iot/ + сборка iot-mqtt-bridge бинаря
|
|
# 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/
|
|
# iot/ — IoT CRD types, controller, mqtt-bridge cmd.
|
|
# Обязательно: main.go импортирует iot/api/v1alpha1 и iot/controllers — без этого go build упадёт.
|
|
COPY iot/ iot/
|
|
|
|
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go
|
|
# iot-mqtt-bridge — отдельный бинарь в том же образе.
|
|
# Запускается в iot-mqtt-bridge Deployment через command: ["/iot-mqtt-bridge"].
|
|
# Один образ, два entrypoint — практично для MVP: один CI pipeline, один registry repo.
|
|
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o iot-mqtt-bridge ./iot/cmd/mqtt-bridge/
|
|
|
|
FROM alpine:3.19
|
|
# ca-certificates нужны для TLS (S3 HTTPS, DockerHub)
|
|
RUN apk add --no-cache ca-certificates
|
|
WORKDIR /
|
|
COPY --from=builder /workspace/manager .
|
|
# iot-mqtt-bridge — второй бинарь, запускается отдельным Deployment-ом.
|
|
COPY --from=builder /workspace/iot-mqtt-bridge .
|
|
# migrations нужны при старте — оператор читает SQL файлы для инициализации БД
|
|
COPY migrations/ migrations/
|
|
# Запускаем от непривилегированного пользователя
|
|
USER 65532:65532
|
|
|
|
ENTRYPOINT ["/manager"]
|