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

相关推荐
nashane1 小时前
HarmonyOS 6学习:应用无响应(AppFreeze)故障排查与性能优化指南
人工智能·pytorch·python
Rain5091 小时前
GitLab-Runner + AI 代码审查服务 + 远程大模型 全套部署运维实战
linux·运维·人工智能·python·ci/cd·gitlab·ai编程
Engineer邓祥浩1 小时前
宏观认知(4):AI与社会——吴恩达《AI for Everyone》Week4学习笔记
人工智能·笔记·学习
标书畅畅行1 小时前
2026年企业级全流程 AI 标书工具选型指南:技术、合规与落地实践
大数据·人工智能
纽创信安1 小时前
智绘安全・万象由 AI 生|PANDA2026 主题 AI 创作大赛开启征稿!
ai·密码学·ai写作
imDwAaY1 小时前
从非线性分类到多层神经网络 CS188 Note21 学习笔记
人工智能·笔记·python·神经网络·学习·机器学习·分类
稳如磐石.1 小时前
北京工控机生产工厂
大数据·人工智能·python
jeffer_liu1 小时前
Spring AI 生产级实战-结构化输出
java·人工智能·后端·spring·大模型
梓䈑1 小时前
C++ AI模型统一接入引擎(第一篇):项目介绍与环境搭建
c++·人工智能·chatgpt