60 lines
1.2 KiB
Docker
60 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
ARG GOARCH=amd64
|
|
ARG GOOS=linux
|
|
ARG CGO_ENABLED=0
|
|
ARG BUILD_TIME=unknown
|
|
ARG VERSION=unknown
|
|
ARG SERVICE
|
|
|
|
# Stage 1: Build
|
|
FROM docker.io/golang:1.24-alpine AS build
|
|
|
|
ARG GOOS
|
|
ARG GOARCH
|
|
ARG CGO_ENABLED
|
|
ARG BUILD_TIME
|
|
ARG VERSION
|
|
ARG SERVICE
|
|
|
|
WORKDIR /src
|
|
|
|
COPY go.mod go.sum ./
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
go mod download
|
|
|
|
COPY . .
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
CGO_ENABLED=${CGO_ENABLED} \
|
|
GOOS=${GOOS} \
|
|
GOARCH=${GOARCH} \
|
|
go build -trimpath \
|
|
-ldflags "-s -w -X main.BuildTime=${BUILD_TIME} -X main.Version=${VERSION}" \
|
|
-o /out/${SERVICE} ./cmd/${SERVICE} && \
|
|
chmod +x /out/${SERVICE}
|
|
|
|
# Stage 2: Runtime
|
|
FROM gcr.io/distroless/static-debian13:latest AS runtime
|
|
|
|
ARG BUILD_TIME
|
|
ARG VERSION
|
|
ARG SERVICE
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=build --chown=1000:1000 /out/${SERVICE} /app/bin
|
|
|
|
EXPOSE 8080 50051
|
|
|
|
LABEL org.opencontainers.image.created="${BUILD_TIME}" \
|
|
org.opencontainers.image.version="${VERSION}" \
|
|
org.opencontainers.image.title="${SERVICE}"
|
|
|
|
USER 1000
|
|
|
|
ENTRYPOINT ["/app/bin"]
|
|
|
|
CMD []
|