|
|
@@ -0,0 +1,38 @@
|
|
|
+# 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 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 启动 alien_store 服务
|
|
|
+# alien_store.main:app -> 指向 alien_store/main.py 中的 app 对象
|
|
|
+CMD ["uvicorn", "alien_store.main:app", "--host", "0.0.0.0", "--port", "33333"]
|