python项目打包为镜像

1.生成 requirements.txt

在项目根目录下,使用 pipreqs生成依赖文件,确保镜像构建时安装正确的包

复制代码
pip install pipreqs
pipreqs . --encoding=utf8 --force

2.编写 Dockerfile

复制代码
# 使用官方 Python 轻量级镜像
FROM python:3.11-slim

# 设置容器内工作目录
WORKDIR /app

# 复制依赖文件并安装依赖(利用Docker缓存层)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
#RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口(FastAPI服务运行的端口,仅作声明,运行时需用-p映射)
EXPOSE 8000

# 启动命令(用uvicorn启动服务,host=0.0.0.0允许容器外部访问)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

3. (可选)添加 .dockerignore 文件

避免将本地虚拟环境、缓存文件等打入镜像,减小镜像体积

(1)在Dockerfile 所在的同一目录下 ,创建一个名为 .dockerignore的文件

复制代码
touch .dockerignore

(2)使用文本编辑器打开 .dockerignore文件,根据你的项目类型添加需要忽略的条目。一个典型的 Python FastAPI 项目可以这样配置

复制代码
# 忽略版本控制目录
.git/

# 忽略Python编译缓存和虚拟环境
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
venv/
env/
.venv/

# 忽略IDE配置文件
.vscode/
.idea/
*.swp
*.swo

# 忽略日志文件
*.log
logs/

# 忽略环境变量文件(通常包含敏感信息)
.env
.env.production

# 忽略README等本地文档(除非需要打包进镜像)
README.md

4. 编写Dockerfile文件构建镜像与运行容器

直接拷贝整个目录到容器内定义的工作目录

启动FastAPI服务(关键:指向agent_chat_demo01下的主文件,假设主文件是agent_chat_demo01/app/app.main.py)

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

复制代码
# 1. 选择轻量且稳定的Python基础镜像(推荐3.11+,兼容大部分依赖)
FROM python:3.11-slim

# 2. 设置容器内的工作目录(后续所有操作都在/app下)
WORKDIR /app

# 3. 设置Python环境变量:避免生成pyc文件、日志实时输出(方便调试)
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

# 4. (可选)安装系统依赖(如果你的app依赖gcc、libpq等,取消注释)
# RUN apt-get update && apt-get install -y --no-install-recommends \
#     gcc \
#     && rm -rf /var/lib/apt/lists/*

# 5. 复制项目的依赖文件到容器工作目录(先复制requirements.txt,利用Docker缓存)
COPY agent_chat_demo01/requirements.txt .

# 6. 安装Python依赖(--no-cache-dir避免缓存,减小镜像体积)
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 7. 复制整个agent_chat_demo01目录到容器的/app目录下(保留顶层目录,保证导入路径正确)
COPY agent_chat_demo01/ ./agent_chat_demo01/

# 8. 暴露FastAPI服务端口(默认8000,若你代码里用其他端口,改成对应值)
EXPOSE 8000

# 9. 启动FastAPI服务(关键:指向agent_chat_demo01下的主文件,假设主文件是agent_chat_demo01/app/app.main.py)
# 若你的主文件不是main.py(比如是app.py),改成对应名称,如"agent_chat_demo01.app:app"
CMD ["uvicorn", "agent_chat_demo01.app.main:app", "--host", "0.0.0.0", "--port", "8000"]

docker build -t my-fastapi-app .

5.启动服务

复制代码
version: '3.8'  # 指定 Compose 文件的版本

services:
  # 定义一个名为 fastapi-app 的服务
  fastapi-app:
    build: .  # 使用当前目录下的 Dockerfile 构建镜像
    container_name: my-fastapi-container  # 指定容器名,相当于 --name
    ports:
      - "8000:8000"  # 端口映射,相当于 -p 8000:8000
    # 设置环境变量,例如指定生产环境,也可使用 environment 文件
    environment:
      - ENV=production
    # 卷挂载,用于开发时代码热重载:将宿主机代码目录挂载到容器内
    # volumes:
    #   - ./app:/app
    # 配置重启策略,避免容器意外退出
    restart: unless-stopped

6.配置文件映射

相关推荐
(>_<)6 小时前
java minio 分片上传工具类与测试demo
java·minio·分片上传
不想打工的码农6 小时前
MyBatis-Plus多数据源实战:被DBA追着改配置后,我肝出这份避坑指南(附动态切换源码)
java·后端
Pyeako6 小时前
深度学习--卷积神经网络(下)
人工智能·python·深度学习·卷积神经网络·数据增强·保存最优模型·数据预处理dataset
OPEN-Source7 小时前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
廖圣平7 小时前
从零开始,福袋直播间脚本研究【七】《添加分组和比特浏览器》
python
B站_计算机毕业设计之家7 小时前
豆瓣电影数据可视化分析系统 | Python Flask框架 requests Echarts 大数据 人工智能 毕业设计源码(建议收藏)✅
大数据·python·机器学习·数据挖掘·flask·毕业设计·echarts
Coder_Boy_7 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例
java·人工智能·spring boot·后端·spring
mr_LuoWei20097 小时前
python工具:python代码知识库笔记
数据库·python
weixin_395448917 小时前
cursor日志
人工智能·python·机器学习
踢足球09297 小时前
寒假打卡:2026-2-7
java·开发语言·javascript