# --- 第一阶段:构建环境 --- # 使用一个包含编译工具的镜像作为"构建器" FROM python:3.12-slim as builder # 设置环境变量,避免 frontend 弹窗交互 ENV DEBIAN_FRONTEND=noninteractive # 安装 llama-cpp-python 所需的编译工具和依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ pkg-config \ git \ && rm -rf /var/lib/apt/lists/* # 将 Python 包安装到一个独立目录,方便后续拷贝 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PIP_NO_CACHE_DIR=off ENV PIP_DISABLE_PIP_VERSION_CHECK=on ENV PIP_DEFAULT_TIMEOUT=100 ENV POETRY_VIRTUALENVS_CREATE=false ENV PATH="/app/bin:$PATH" WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt # --- 第二阶段:最终运行环境 --- # 使用一个干净、轻量的镜像作为最终的运行环境 FROM python:3.12-slim as final # 安装 llama.cpp 运行时所需的共享库 RUN apt-get update && apt-get install -y --no-install-recommends libgomp1 && rm -rf /var/lib/apt/lists/* # 设置 Hugging Face 的缓存目录 ENV HF_HOME=/data # 设置工作目录 WORKDIR /app # 从构建器阶段拷贝已安装的Python依赖包 COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=builder /usr/local/bin /usr/local/bin # 创建并授权数据目录,用于模型缓存 RUN mkdir /data && chmod 777 /data # 复制应用代码 COPY ./app.py /app/app.py # 暴露容器端口 EXPOSE 8080 # 启动应用的命令 # 使用 uvicorn 运行 app.py 文件中的 app 对象 # --host 0.0.0.0 使其可以从外部访问 # --port 8080 监听指定的端口 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]