你好、Docker
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
首页
Docker命令大全
Dockerfile
DockerCompose
  • Docker部署Vue项目指南
  • Docker部署Nginx指南
  • Docker部署Django项目指南
  • Docker部署fastapi项目指南
笔记
  • Docker部署fastapi项目指南

这是一份用于部署fastapi的Dockerfile案例

# 使用 ghcr.io/astral-sh/uv 作为基础镜像,选择 Python 3.13 版本和 Debian Bookworm slim 变体
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS base

# 定义构建参数和环境变量
# 设置 COMMIT_ID 构建参数,用于追踪代码版本
ARG COMMIT_ID
ENV COMMIT_ID=${COMMIT_ID}

# 设置构建时间参数
ARG BUILD_AT
ENV BUILD_AT=${BUILD_AT}

# 设置工作目录为 /app
WORKDIR /app

# 创建一个非特权用户用于运行应用
# 设置用户 ID 为 10001
ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/home/appuser" \
    --shell "/sbin/nologin" \
    --uid "${UID}" \
    appuser

# 安装必要的系统依赖包
# gcc: 编译工具
# libmariadb-dev-compat 和 libmariadb-dev: MySQL 客户端依赖
# curl: 网络工具
# pkg-config: 编译配置工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    libmariadb-dev-compat \
    libmariadb-dev \
    curl \
    pkg-config && \
    rm -rf /var/lib/apt/lists/* \
    && apt-get clean


# 开始最终阶段的构建
FROM base AS final

# 设置工作目录
WORKDIR /app

# 将源代码复制到容器中
COPY . .

# 将应用目录的所有权更改为非特权用户
RUN chown -R appuser:appuser /app

# 切换到非特权用户运行应用
USER appuser

# 暴露应用监听的端口
EXPOSE 8000

# 使用 uv 同步依赖
RUN uv sync

# 使用 gunicorn 运行应用
# --workers 4: 设置 4 个工作进程
# --worker-class uvicorn.workers.UvicornWorker: 使用 uvicorn 的异步工作进程
# --bind 0.0.0.0:8000: 绑定到所有网络接口的 8000 端口
CMD ["uv", "run", "--with", "gunicorn", "gunicorn", "app:app", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"]

最近更新:: 2025/3/26 07:46
Contributors: YAOBIN