From d99cd1dd564e2869c83025b9897bace65a713bc2 Mon Sep 17 00:00:00 2001 From: Manuel Ganter Date: Fri, 6 Feb 2026 11:54:20 +0100 Subject: [PATCH] feat(docker): multi-stage build for collector and receiver Add multi-stage Dockerfile that can build both images: - `docker build --target collector` for the collector - `docker build --target receiver` for the receiver (with CGO for SQLite) Co-Authored-By: Claude Opus 4.5 --- Dockerfile | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64a266f..75f7b7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,37 @@ -FROM golang:1.25-alpine AS builder +FROM golang:1.25-alpine AS builder-base WORKDIR /app -COPY go.mod ./ +COPY go.mod go.sum ./ RUN go mod download COPY . . +# Collector build (no CGO needed) +FROM builder-base AS builder-collector + RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /resource-collector ./cmd/collector -FROM alpine:3.19 +# Receiver build (CGO needed for SQLite) +FROM builder-base AS builder-receiver -COPY --from=builder /resource-collector /usr/local/bin/resource-collector +RUN apk add --no-cache gcc musl-dev +RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-s -w" -o /metrics-receiver ./cmd/receiver + +# Collector image +FROM alpine:3.19 AS collector + +COPY --from=builder-collector /resource-collector /usr/local/bin/resource-collector ENTRYPOINT ["/usr/local/bin/resource-collector"] + +# Receiver image +FROM alpine:3.19 AS receiver + +RUN apk add --no-cache sqlite-libs + +COPY --from=builder-receiver /metrics-receiver /usr/local/bin/metrics-receiver + +EXPOSE 8080 + +ENTRYPOINT ["/usr/local/bin/metrics-receiver"]