# ---- Build Stage ---- FROM golang:1.26 AS builder WORKDIR /app # ---- Step 1: Copy go.mod/go.sum for caching ---- # Copy only the minimal files first for layer caching COPY libshared/go.mod libshared/go.sum ./libshared/ COPY account-manager/go.mod account-manager/go.sum ./account-manager/ # ---- Step 2: Download dependencies ---- RUN go -C libshared mod download RUN go -C account-manager mod download # ---- Step 3: Copy full source code ---- COPY libshared ./libshared COPY account-manager ./account-manager # ---- Step 4: Create Go workspace inside container ---- RUN go work init ./account-manager ./libshared ## Optional: verify workspace #RUN go work list # ---- Step 5: Build binary ---- WORKDIR /app/account-manager RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server # ---- Runtime Stage ---- FROM gcr.io/distroless/base-debian12 WORKDIR /app COPY --from=builder /app/account-manager/server . EXPOSE 8080 USER nonroot:nonroot ENTRYPOINT ["/app/server"]