You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.5 KiB
63 lines
2.5 KiB
# voitrans 业务单镜像:gateway + home + api + mcp + timer 五个集群(RPCX/ETCD)服务打进一个镜像
|
|
# 构建上下文:apps/services/
|
|
# 用 shell 脚本(entrypoint)管理多进程:任一服务退出即整个容器退出,交给 docker restart 策略拉起。
|
|
# 运行期配置 confs/ 由宿主机 deploy/voitrans/ 目录挂入当 /app(见 docker-compose.yml)。
|
|
|
|
# ============ Stage 1: Builder ============
|
|
FROM golang:1.25-alpine AS builder
|
|
|
|
ENV GOPROXY=https://goproxy.cn,direct \
|
|
CGO_ENABLED=0 \
|
|
GOOS=linux \
|
|
GOARCH=amd64
|
|
|
|
WORKDIR /src
|
|
|
|
# 预热依赖缓存
|
|
COPY go.mod go.sum ./
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
go mod download
|
|
|
|
COPY . .
|
|
|
|
# 编译 5 个服务(统一 .a11 后缀,与镜像名 voitrans-a11 对齐)
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
mkdir -p /out && \
|
|
go build -trimpath -ldflags "-s -w" -o /out/gateway.a11 ./services/gateway/ && \
|
|
go build -trimpath -ldflags "-s -w" -o /out/home.a11 ./services/home/ && \
|
|
go build -trimpath -ldflags "-s -w" -o /out/api.a11 ./services/api/ && \
|
|
go build -trimpath -ldflags "-s -w" -o /out/mcp.a11 ./services/mcp/ && \
|
|
go build -trimpath -ldflags "-s -w" -o /out/timer.a11 ./services/timer/
|
|
|
|
# ============ Stage 2: Runtime ============
|
|
FROM alpine:3.20
|
|
|
|
# nc 用于 compose 健康检查探测端口
|
|
RUN apk add --no-cache tzdata ca-certificates && \
|
|
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
|
echo "Asia/Shanghai" > /etc/timezone
|
|
|
|
# 二进制与启动脚本放 /opt/voitrans,避免与宿主机挂载的 /app 冲突
|
|
COPY --from=builder /out/gateway.a11 /opt/voitrans/a11/gateway.a11
|
|
COPY --from=builder /out/home.a11 /opt/voitrans/a11/home.a11
|
|
COPY --from=builder /out/api.a11 /opt/voitrans/a11/api.a11
|
|
COPY --from=builder /out/mcp.a11 /opt/voitrans/a11/mcp.a11
|
|
COPY --from=builder /out/timer.a11 /opt/voitrans/a11/timer.a11
|
|
COPY entrypoint.voitrans.sh /opt/voitrans/entrypoint.sh
|
|
|
|
RUN chmod +x /opt/voitrans/entrypoint.sh /opt/voitrans/a11/*.a11 && \
|
|
mkdir -p /app
|
|
|
|
# 工作目录:宿主机把 deploy/voitrans 目录挂为 /app,内含 confs/ log/ 及各服务运行期资源
|
|
WORKDIR /app
|
|
|
|
# 端口声明(容器内部,对外经反代/compose 暴露)
|
|
# gateway: 7001 RPCX / 7100 HTTP
|
|
# home: 7002 RPCX
|
|
# timer: 7003 RPCX
|
|
# mcp: 7004 RPCX / 7300 HTTP(MCP)
|
|
# api: 7005 RPCX / 8080 Console
|
|
EXPOSE 7001 7002 7003 7004 7005 7100 7300 8080
|
|
|
|
ENTRYPOINT ["/opt/voitrans/entrypoint.sh"]
|
|
|