Dockerfile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # 国内 Jenkins 默认走阿里云镜像,避免拉取 docker.io 超时
  2. # 可覆盖: docker build --build-arg NODE_IMAGE=node:20-alpine ...
  3. ARG NODE_IMAGE=registry.cn-hangzhou.aliyuncs.com/library/node:20-alpine
  4. ARG PYTHON_IMAGE=registry.cn-hangzhou.aliyuncs.com/library/python:3.11-slim
  5. # Stage 1: build frontend
  6. FROM ${NODE_IMAGE} AS web-builder
  7. WORKDIR /app/web
  8. COPY web/package.json web/package-lock.json ./
  9. RUN npm config set registry https://registry.npmmirror.com \
  10. && npm ci
  11. COPY web/ ./
  12. RUN npm run build
  13. # Stage 2: Python runtime
  14. FROM ${PYTHON_IMAGE}
  15. WORKDIR /app
  16. ENV PYTHONUNBUFFERED=1 \
  17. PYTHONDONTWRITEBYTECODE=1 \
  18. PIP_NO_CACHE_DIR=1 \
  19. PIP_DISABLE_PIP_VERSION_CHECK=1
  20. RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g; s|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
  21. sed -i 's|deb.debian.org|mirrors.aliyun.com|g; s|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true
  22. RUN apt-get update \
  23. && apt-get install -y --no-install-recommends gcc \
  24. && rm -rf /var/lib/apt/lists/*
  25. COPY pyproject.toml requirements.txt README.md ./
  26. COPY supply_agent/ supply_agent/
  27. COPY supply_infra/ supply_infra/
  28. COPY agents/ agents/
  29. COPY api/ api/
  30. COPY jobs/ jobs/
  31. RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com ".[odps]"
  32. COPY --from=web-builder /app/web/dist ./web/dist
  33. EXPOSE 8080
  34. CMD ["python", "-m", "api"]