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

# 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"]