45 lines
1.4 KiB
Docker
45 lines
1.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# ─── Stage 1: Build Go binaries ───────────────────────────────────────────────
|
|
FROM --platform=$BUILDPLATFORM golang:1.23-alpine AS builder
|
|
|
|
ARG SERVICE=tenant-api
|
|
ARG TARGETOS=linux
|
|
ARG TARGETARCH=amd64
|
|
|
|
RUN apk --no-cache add ca-certificates git
|
|
|
|
WORKDIR /app
|
|
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
|
|
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
|
|
go build -trimpath -ldflags="-s -w" \
|
|
-o /bin/service ./cmd/${SERVICE}
|
|
|
|
# ─── Stage 2: Migration image (bundles SQL files + migrate binary) ─────────────
|
|
FROM migrate/migrate:v4.19.1 AS migrate-tool
|
|
|
|
FROM alpine:3.19 AS migrate
|
|
RUN apk --no-cache add ca-certificates
|
|
COPY --from=migrate-tool /usr/local/bin/migrate /usr/local/bin/migrate
|
|
COPY migrations/ /migrations/
|
|
COPY migrations_monitoring/ /migrations_monitoring/
|
|
COPY migrations_ops/ /migrations_ops/
|
|
ENTRYPOINT ["/usr/local/bin/migrate"]
|
|
|
|
# ─── Stage 3: Runtime image ────────────────────────────────────────────────────
|
|
FROM alpine:3.19 AS runtime
|
|
RUN apk --no-cache add ca-certificates tzdata
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /bin/service /app/service
|
|
COPY configs/ /app/configs/
|
|
|
|
EXPOSE 8080 8081
|
|
ENTRYPOINT ["/app/service"]
|