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       # 重启

相关推荐
呆呆敲代码的小Y1 小时前
RAG 表格解析完全指南:xParse、PaddleOCR、MinerU 实测对比并接入Agent使用
ai·llm·agent·rag·表格解析·xparse
火山引擎开发者社区6 小时前
VeOps CLI:你的火山引擎可观测排障助手
人工智能
To_OC8 小时前
调用远程MCP,手搓一个能查酒店、自动打开浏览器的 Agent
人工智能·agent·mcp
启雀AI8 小时前
生物医疗行业如何建设合规、安全、可复用的知识库?
人工智能·安全·软件构建·知识图谱·知识库
x-cmd8 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
To_OC8 小时前
跑通第一个 MCP Server 后,我终于搞懂它到底解决了什么问题
人工智能·agent·mcp
楷哥爱开发8 小时前
如何使用 Claude Fable 5 进行网页抓取?2026最新实战教程
大数据·网络·人工智能
YMWM_8 小时前
lerobot中use_relative_actions=True需要重新计算meta/stats.json等信息
人工智能·深度学习·lerobot
触底反弹8 小时前
🔥 DeepSeek 560 万美金干翻 OpenAI?一文讲透「蒸馏」的来龙去脉
人工智能
私人珍藏库9 小时前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能