AI学习——Docker 打包与部署

Docker 打包与部署

  • [一、Docker 介绍](#一、Docker 介绍)
  • 二、我们要做什么
  • 三、项目结构
  • [四、第一步:写 requirements.txt(必须)](#四、第一步:写 requirements.txt(必须))
  • [五、第二步:写 Dockerfile(核心)](#五、第二步:写 Dockerfile(核心))
  • [六、第三步:你的 main.py(RAG + FastAPI)](#六、第三步:你的 main.py(RAG + FastAPI))
  • [七、第四步:构建 Docker 镜像(本地)](#七、第四步:构建 Docker 镜像(本地))
  • 八、第五步:本地运行测试
  • 九、第六步:部署到服务器(最关键)
    • [1. 把项目文件夹传到服务器](#1. 把项目文件夹传到服务器)
    • [2. 服务器里执行构建(同上)](#2. 服务器里执行构建(同上))
    • [3. 后台启动](#3. 后台启动)
    • [4. 访问(服务器IP + 端口)](#4. 访问(服务器IP + 端口))
  • [十、Docker 常用命令](#十、Docker 常用命令)

一、Docker 介绍

Docker = 把你的代码 + 环境 + 依赖全部打包成一个"压缩包"(镜像)

  • 在哪都能跑
  • 不用装 Python、不用装库
  • 服务器/本地/云端完全一致
  • 答辩、部署、展示零环境问题

二、我们要做什么

把你之前的 RAG 文档问答 + FastAPI 接口 打包成 Docker,部署到服务器,任何人都能调用。


三、项目结构

复制代码
your_project/
├── main.py          # 你的 FastAPI + RAG/Agent 代码
├── requirements.txt # 依赖清单
└── Dockerfile       # 打包配置(我们写)

四、第一步:写 requirements.txt(必须)

创建文件 requirements.txt,写入:

复制代码
fastapi
uvicorn
langchain
langchain-openai
langchain-community
chromadb
pypdf
python-multipart
beautifulsoup4
requests
huggingface-hub

五、第二步:写 Dockerfile(核心)

创建文件 Dockerfile(无后缀),直接复制:

dockerfile 复制代码
# 1. 基础 Python 环境
FROM python:3.11-slim

# 2. 设置工作目录
WORKDIR /app

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

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

# 5. 复制全部代码
COPY . .

# 6. 暴露端口
EXPOSE 8000

# 7. 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

六、第三步:你的 main.py(RAG + FastAPI)

python 复制代码
# main.py
from fastapi import FastAPI, UploadFile, File
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
import tempfile
import os

app = FastAPI(title="RAG 文档问答 API")

# 配置 LLM
llm = ChatOpenAI(
    model="gpt-3.5-turbo",
    temperature=0.1,
    api_key="你的API_KEY",
    base_url="https://api.chatanywhere.tech/v1"
)

embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh")
vector_store = None

# 1. 上传文档构建知识库
@app.post("/upload")
async def upload(files: list[UploadFile] = File(...)):
    global vector_store
    docs = []

    for file in files:
        suffix = file.filename.split(".")[-1]
        with tempfile.NamedTemporaryFile(delete=False, suffix=f".{suffix}") as tmp:
            tmp.write(await file.read())
            loader = PyPDFLoader(tmp.name)
            docs.extend(loader.load())

    splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    chunks = splitter.split_documents(docs)
    vector_store = Chroma.from_documents(chunks, embeddings)
    return {"status": "ok", "chunks": len(chunks)}

# 2. 提问接口
@app.get("/ask")
def ask(question: str):
    if not vector_store:
        return {"answer": "请先上传文档"}
    
    qa = RetrievalQA.from_chain_type(
        llm=llm,
        retriever=vector_store.as_retriever(search_kwargs={"k": 3})
    )
    return {"answer": qa.run(question)}

# 3. 健康检查
@app.get("/")
def home():
    return {"status": "running", "project": "RAG Docker 部署"}

七、第四步:构建 Docker 镜像(本地)

进入项目目录,运行:

bash 复制代码
docker build -t rag-app .

等待 2--5 分钟,构建完成!


八、第五步:本地运行测试

bash 复制代码
docker run -d -p 8000:8000 rag-app

打开浏览器访问:


九、第六步:部署到服务器(最关键)

1. 把项目文件夹传到服务器

2. 服务器里执行构建(同上)

bash 复制代码
docker build -t rag-app .

3. 后台启动

bash 复制代码
docker run -d \
  --restart always \
  -p 8000:8000 \
  --name rag-app \
  rag-app

4. 访问(服务器IP + 端口)

复制代码
http://你的服务器IP:8000/docs

部署完成!全世界都能调用你的 AI 接口!


十、Docker 常用命令

bash 复制代码
docker build -t 名字 .      # 构建镜像
docker run -d -p 8000:8000 名字  # 运行
docker ps                   # 查看运行中容器
docker logs 容器ID           # 查看日志
docker stop 容器ID           # 停止
docker restart 容器ID       # 重启

相关推荐
Raas1001 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持哪些模型?从原理到落地
大数据·人工智能·网关·gateway·mai gateway·企业级产品
豪气的程序猿3 小时前
电商图片工作流怎么选?Lingko AI 对比折叠键盘主图与详情页
人工智能
小刘快学习4 小时前
把 AI 账单拆到部门:企业 AI 网关的精准分账思路
人工智能
米小虾4 小时前
你让监控模型读的思维链,可能是攻击者写好的剧本
人工智能
March.s4 小时前
Docker 容器技术完全指南:从生态到架构的深度解析
docker
deepseek234 小时前
Iris 开源搜索智能体拆解:35B 与 397B 中文仅差 0.3 分,上下文管理胜过堆参数
人工智能·ai agent·开源模型
ai小陈4 小时前
CUDA Stream实战:让数据传输与GPU计算真正重叠
人工智能·深度学习·ai·pdf·云计算·gpu算力
residual_fan4 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
东风破_4 小时前
从 RAG 到 Agentic RAG:第二步,把复杂问题拆开再检索
人工智能
小弥儿4 小时前
GitHub今日热榜 | 2026-09-15:AI 智能体与本地生成工具领跑
学习·开源