AI学习——Docker 打包与部署
Docker 打包与部署一、Docker 介绍二、我们要做什么三、项目结构四、第一步写 requirements.txt必须五、第二步写 Dockerfile核心六、第三步你的 main.pyRAG FastAPI七、第四步构建 Docker 镜像本地进入项目目录运行八、第五步本地运行测试九、第六步部署到服务器最关键1. 把项目文件夹传到服务器2. 服务器里执行构建同上3. 后台启动4. 访问服务器IP 端口十、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无后缀直接复制# 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.pyRAG FastAPI# main.pyfromfastapiimportFastAPI,UploadFile,Filefromlangchain_community.document_loadersimportPyPDFLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_community.vectorstoresimportChromafromlangchain_community.embeddingsimportHuggingFaceEmbeddingsfromlangchain_openaiimportChatOpenAIfromlangchain.chainsimportRetrievalQAimporttempfileimportos appFastAPI(titleRAG 文档问答 API)# 配置 LLMllmChatOpenAI(modelgpt-3.5-turbo,temperature0.1,api_key你的API_KEY,base_urlhttps://api.chatanywhere.tech/v1)embeddingsHuggingFaceEmbeddings(model_nameBAAI/bge-small-zh)vector_storeNone# 1. 上传文档构建知识库app.post(/upload)asyncdefupload(files:list[UploadFile]File(...)):globalvector_store docs[]forfileinfiles:suffixfile.filename.split(.)[-1]withtempfile.NamedTemporaryFile(deleteFalse,suffixf.{suffix})astmp:tmp.write(awaitfile.read())loaderPyPDFLoader(tmp.name)docs.extend(loader.load())splitterRecursiveCharacterTextSplitter(chunk_size500,chunk_overlap50)chunkssplitter.split_documents(docs)vector_storeChroma.from_documents(chunks,embeddings)return{status:ok,chunks:len(chunks)}# 2. 提问接口app.get(/ask)defask(question:str):ifnotvector_store:return{answer:请先上传文档}qaRetrievalQA.from_chain_type(llmllm,retrievervector_store.as_retriever(search_kwargs{k:3}))return{answer:qa.run(question)}# 3. 健康检查app.get(/)defhome():return{status:running,project:RAG Docker 部署}七、第四步构建 Docker 镜像本地进入项目目录运行dockerbuild-trag-app.等待 2–5 分钟构建完成八、第五步本地运行测试dockerrun-d-p8000:8000 rag-app打开浏览器访问 http://localhost:8000/docsAPI 界面直接出现九、第六步部署到服务器最关键1. 把项目文件夹传到服务器2. 服务器里执行构建同上dockerbuild-trag-app.3. 后台启动dockerrun-d\--restartalways\-p8000:8000\--namerag-app\rag-app4. 访问服务器IP 端口http://你的服务器IP:8000/docs部署完成全世界都能调用你的 AI 接口十、Docker 常用命令dockerbuild-t名字.# 构建镜像dockerrun-d-p8000:8000 名字# 运行dockerps# 查看运行中容器dockerlogs 容器ID# 查看日志dockerstop 容器ID# 停止dockerrestart 容器ID# 重启