26 lines
979 B
Docker
26 lines
979 B
Docker
# 後端共用 image:一次 build gateway / worker / tool 三個 binary。
|
||
# compose 以 entrypoint/command 覆寫,決定該容器當 gateway、job worker 或一次性 init。
|
||
# build context = repo root(見 deploy/docker-compose.yml)。
|
||
|
||
FROM golang:1.23-alpine AS build
|
||
WORKDIR /src
|
||
RUN apk add --no-cache git
|
||
COPY backend/go.mod backend/go.sum ./
|
||
RUN go mod download
|
||
COPY backend/ ./
|
||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w" -o /out/gateway . \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w" -o /out/worker ./cmd/worker \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w" -o /out/tool ./cmd/tool
|
||
|
||
FROM alpine:3.20
|
||
RUN apk add --no-cache ca-certificates tzdata wget
|
||
ENV TZ=UTC
|
||
WORKDIR /app
|
||
COPY --from=build /out/ /app/
|
||
COPY backend/etc/ /app/etc/
|
||
|
||
# 預設角色為 gateway;compose 會把 worker / init 用 entrypoint 覆寫。
|
||
EXPOSE 8890
|
||
ENTRYPOINT ["/app/gateway"]
|
||
CMD ["-f", "/app/etc/gateway.prod.yaml"]
|