Files
Edu/services/data-ana/Dockerfile

44 lines
1.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多阶段构建builder 缓存依赖runtime 精简镜像
# 对齐 02-architecture-design.md §16 部署规范
# ===== Stage 1: builder =====
FROM python:3.12-slim AS builder
WORKDIR /app
# 安装 uv快速依赖管理
RUN pip install uv
# 先复制 pyproject.toml利用 Docker 层缓存
COPY pyproject.toml .
# 同步依赖到虚拟环境(--no-dev 不装开发依赖)
RUN uv sync --no-dev
# ===== Stage 2: runtime =====
FROM python:3.12-slim AS runtime
WORKDIR /app
# 从 builder 复制虚拟环境
COPY --from=builder /app/.venv /app/.venv
# 确保虚拟环境在 PATH 中
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH="/app/src"
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# 复制源码
COPY src ./src
# 暴露端口HTTP 3006Gateway 直连降级)+ gRPC 50055AnalyticsService 12 RPC
EXPOSE 3006 50055
# 健康检查HTTP /healthz每 30s 一次)
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:3006/healthz')" || exit 1
# 启动命令uvicorn HTTP servergRPC server 在 lifespan 中启动)
CMD ["uvicorn", "src.data_ana.main:app", "--host", "0.0.0.0", "--port", "3006"]