国内Dockerfile的配置,提高打包速度

bash 复制代码
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 配置国内镜像源加速
RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
    sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    libpq-dev \
    poppler-utils \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 复制应用代码
COPY . .

# 创建必要的目录
RUN mkdir -p /app/uploads /app/logs

# 暴露端口
EXPOSE 8000

# 默认命令
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
  1. 选择基础镜像

FROM python:3.10-slim

复制代码
•	使用官方的 python:3.10-slim 作为基础镜像
•	这是一个精简版 Debian + Python 3.10,体积比较小,适合做生产镜像

⸻

  1. 设置工作目录

WORKDIR /app

复制代码
•	把容器里的当前工作目录设为 /app
•	后面的命令(比如 COPY . .、pip install 等)都会以 /app 为当前目录执行

⸻

  1. 换 apt 的国内源(阿里云)

RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null ||

sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list 2>/dev/null || true

复制代码
•	作用:把默认的 deb.debian.org 源替换成 mirrors.aliyun.com,下载系统包更快
•	前面优先改 /etc/apt/sources.list.d/debian.sources,如果这个文件不存在就会报错,因此后面加了 || 再去改 /etc/apt/sources.list
•	2>/dev/null 把错误输出丢掉,|| true 保证这条命令即使失败也不会导致构建中断

⸻

  1. 安装系统依赖

RUN apt-get update && apt-get install -y

gcc

g++

libpq-dev

poppler-utils

&& rm -rf /var/lib/apt/lists/*

复制代码
•	apt-get update:更新软件包列表
•	apt-get install -y 安装以下依赖:
•	gcc, g++:C / C++ 编译器,很多 Python 三方库(比如带 C 扩展的)编译时需要
•	libpq-dev:PostgreSQL 客户端开发库,通常是给 psycopg2 等数据库驱动编译用的
•	poppler-utils:PDF 相关工具,比如 pdftotext,常用于 PDF 转文本等
•	rm -rf /var/lib/apt/lists/*:清理 apt 缓存,减小镜像体积

⸻

  1. 复制依赖清单并安装 Python 依赖

COPY requirements.txt .

复制代码
•	把宿主机当前目录下的 requirements.txt 拷贝到容器的 /app/requirements.txt

RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

复制代码
•	使用 pip 安装 Python 依赖
•	--no-cache-dir:不保留 pip 缓存,减小镜像体积
•	-r requirements.txt:按依赖文件安装
•	-i https://pypi.tuna.tsinghua.edu.cn/simple:使用清华源,加速下载

这里先 COPY requirements.txt 再 pip install,有一个好处:

只要 requirements 没变,这一层会命中缓存,构建会很快。

⸻

  1. 拷贝项目代码

COPY . .

复制代码
•	把你本地项目目录下的所有文件拷贝进容器 /app/
•	包括你的 app 代码、配置文件等

⸻

  1. 创建必要目录

RUN mkdir -p /app/uploads /app/logs

复制代码
•	创建两个目录:
•	/app/uploads:通常用来存上传文件
•	/app/logs:用来存日志文件
•	-p 保证目录不存在就创建,存在也不会报错

⸻

  1. 暴露端口

EXPOSE 8000

复制代码
•	声明容器内服务使用的端口是 8000
•	只是一个声明,真正对外映射端口还是要在 docker run 或 docker-compose 里用 -p 8000:8000 之类来做

⸻

  1. 启动命令(默认入口)

CMD "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"

复制代码
•	指定容器启动时默认执行的命令:
•	uvicorn app.main:app:运行 Uvicorn,加载 app/main.py 里的 app 对象(FastAPI / Starlette 应用)
•	--host 0.0.0.0:监听所有网卡地址,外部才能访问
•	--port 8000:使用 8000 端口

⸻

总结一下这份 Dockerfile 做了什么?

  1. 选了一个轻量级 Python 3.10 基础镜像

  2. 换 apt 源为阿里云,加快系统包下载

  3. 安装了编译器、Postgres 开发包和 PDF 工具

  4. 用清华源安装 Python 依赖

  5. 拷贝你的应用代码,创建上传和日志目录

  6. 暴露 8000 端口

  7. 用 Uvicorn 启动 FastAPI 应用 app.main:app

相关推荐
John_Hui8 分钟前
第 1 篇:VMware 安装 Ubuntu 24.04.3 Server
linux·运维·ubuntu
kyle~17 分钟前
C++ 原子操作、内存模型与无锁并发编程
linux·开发语言·c++·操作系统
2401_8697695921 分钟前
gdb_进程概念
linux
Lzg_na24 分钟前
数据链路层差错控制使用的算法详解
网络
小猪佩奇TONY1 小时前
Linux 内核学习(19) --- linux swap 机制
linux·学习·swap·kswapd
努力努力再努力wz1 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
长不大的杨瑞杰1 小时前
OpenCode v2 团队治理实战:多仓库 Policy、灰度发布与故障回滚
运维·人工智能·安全·软件工程·devops
loulanyue_1 小时前
当AI学会自主攻击与渗透破壁:Agent行为链失控与Mythos级攻防颠覆下的安全范式重构——读CNCC2026第六届网络生态治理论坛实录
网络·人工智能·安全
第404号工位2 小时前
浏览器的“无痕模式”是当代最大安慰剂?我用 30 行 JS 提取硬件指纹,跨网络换代理照样精准锁定你
linux·人工智能·python
2401_868534782 小时前
英语演讲:麻省理工校长2024年毕业典礼演讲
服务器·网络