ProofedMesh/services/approval-service/Dockerfile

39 lines
1.2 KiB
Text
Raw Normal View History

# syntax=docker/dockerfile:1.7
# ---------- build ----------
FROM golang:1.23-alpine3.21 AS build
ENV CGO_ENABLED=0 \
GOOS=linux \
GOFLAGS="-trimpath"
WORKDIR /src
# Pre-cache module metadata before copying sources. approval-service is
# currently stdlib-only (no go.sum), but `go mod download` on a sum-less
# module is a no-op and keeps the layer stable if a go.sum is added later.
COPY services/approval-service/go.mod ./services/approval-service/
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg/mod \
cd services/approval-service && go mod download
COPY services/approval-service/ ./services/approval-service/
WORKDIR /src/services/approval-service
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg/mod \
go vet ./... && \
go test ./... && \
go build -ldflags="-s -w" -o /out/approval-service ./cmd/approval-service
# ---------- runtime ----------
# Distroless static+nonroot: no shell, no package manager, UID/GID 65532.
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /out/approval-service /approval-service
USER 65532:65532
EXPOSE 8080
ENTRYPOINT ["/approval-service"]
CMD ["-listen=:8080"]