FastAPI docker demo
何当共剪西窗烛 却话巴山夜雨时
使用Docker来启动fastapi项目:
# 第一阶段:安装必要的软件
FROM python:3.12-slim as BASE
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PIP_DEFAULT_TIMEOUT=100 \
UV_SYSTEM_PYTHON=1
# Install system packages
RUN set -eux; \
python -c 'a="deb.debian.org";b="mirrors.aliyun.com";f="/etc/apt/sources.list.d/debian.sources";from pathlib import Path;p=Path(f);s=p.read_text();ss=s.replace(a,b);p.write_text(ss)' && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' >/etc/timezone && \
apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
curl \
pkg-config \
libssl-dev \
postgresql-client \
libpq-dev \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 第二阶段:安装Python依赖库
FROM base AS dependencies
WORKDIR /app
# Install uv - Method 1: Copy the binary from its official image
# ghcr.io是github的官方镜像仓库,速度很慢,采用nju大学镜像源加速
# #COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
COPY --from=ghcr.nju.edu.cn/astral-sh/uv:latest /uv /uvx /bin/
# 如果nju的也慢,可以注释掉上面那行,改用pip安装:
# Install uv - Method 2: Install by pip
#RUN pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple && \
# pip install pip-conf-mirror -i https://mirrors.aliyun.com/pypi/simple && \
# pip-conf-mirror --pip qinghua && pip install uv && pip-conf-mirror --uv qinghua
# 复制项目依赖文件(优先复制依赖文件,利用 Docker 缓存)
COPY pyproject.toml uv.lock* ./
# Install CPU pytorch
#RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# Install GPU pytorch
#RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130
# 使用 uv 安装项目依赖(直接安装到系统 Python 环境,不创建虚拟环境)
RUN uv pip install -i https://mirrors.aliyun.com/pypi/simple -r pyproject.toml && uv cache clean
# 第三阶段:复制应用程序代码
FROM dependencies AS source
WORKDIR /app
COPY . .
# 第四阶段:生产环境镜像
FROM source AS release
ENV STAGE="production"
EXPOSE 8000
CMD ["sh", "-c", "STAGE=$STAGE uvicorn main:app --host 0.0.0.0 --port 8000"]
Refs:
https://betterstack.com/community/guides/scaling-docker/docker-build-best-practices/
https://www.cnblogs.com/coreylin/p/17349146.html

浙公网安备 33010602011771号