| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # 1. 基础镜像:Python 3.12 Slim 版本 (体积小,构建快)
- FROM python:3.12-slim
- # 2. 设置工作目录为 /app
- WORKDIR /app
- # 3. 设置环境变量
- # POETRY_VIRTUALENVS_CREATE=false: 直接安装到系统环境,不创建虚拟环境 (容器内不需要隔离)
- # PYTHONUNBUFFERED=1: 日志实时输出,方便 Docker logs 查看
- # PYTHONDONTWRITEBYTECODE=1: 不生成 .pyc 文件,减小体积
- ENV POETRY_VIRTUALENVS_CREATE=false \
- PYTHONUNBUFFERED=1 \
- PYTHONDONTWRITEBYTECODE=1
- # 4. 安装 Poetry
- RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- RUN pip install --no-cache-dir poetry
- # 5. 复制依赖文件 (利用 Docker 缓存层)
- # 先复制 pyproject.toml 和 poetry.lock,如果依赖没变,这层构建会直接使用缓存
- COPY pyproject.toml poetry.lock ./
- # 6. 安装依赖
- # --no-root: 不安装当前项目本身 (因为我们是复制源码运行)
- # --no-interaction: 非交互模式,避免脚本卡住
- RUN poetry install --no-root --no-interaction --no-ansi
- # 7. 复制所有源代码
- # 将当前目录下的所有文件(alien_store, alien_gateway, common 等)都复制进容器
- COPY . .
- # 8. 暴露端口
- # 对应流水线中 -p 33333:33333 的设置
- EXPOSE 33333
- # 9. 启动命令
- # 同时启动 uvicorn 和 celery
- # 使用 shell 格式执行多个命令:后台启动 celery,前台启动 uvicorn
- CMD celery -A alien_util.celery_app worker --beat --loglevel=info & \
- sleep 2 && \
- exec uvicorn alien_store.main:app --host 0.0.0.0 --port 33333
|