尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI Agent白手起家59: 容器化部署——用 Docker Compose 打包多服务应用

AI Agent白手起家59: 容器化部署——用 Docker Compose 打包多服务应用 纲要为什么选择容器化部署核心概念Docker镜像与容器Docker Compose多服务编排服务间内部网络通信数据卷volumes持久化项目部署文件拆解docker-compose.yml服务定义Dockerfile构建指令多进程启动脚本start.sh完整可运行示例项目结构app/main.py一个简单的 FastAPI 服务Dockerfiledocker-compose.yml启动与测试总结与相关度说明容器化部署的意义智能体项目通常会依赖多个外部服务大模型 API、向量数据库、Redis 记忆存储、钉钉开放平台等。传统的部署方式要求在服务器上一一安装和配置这些组件不仅繁琐而且极易因环境差异导致“本地跑得好好的一上线就报错”。Docker通过将应用及其依赖打包为镜像确保了开发、测试、生产环境的高度一致。而Docker Compose则进一步解决了多服务编排的问题让我们可以用一个 YAML 文件定义整个技术栈并实现服务间的内部网络通信和数据持久化。Docker 与 Docker Compose 快速入门镜像就像软件的安装包包含运行环境和代码。容器镜像的运行实例彼此隔离只能通过定义的端口或网络互相访问。Docker Compose管理多个容器的工具用 YAML 文件定义服务、网络和存储卷。服务名解析在同一个 Compose 网络中服务名可以直接作为主机名使用例如redis代替localhost。数据卷将容器内的目录映射到宿主机避免容器重建时数据丢失。项目部署配置详解小浪助手包含两个核心服务app智能体应用和redis记忆存储。下面逐一拆解配置文件。项目结构deploy_project/ ├── app/ │ ├── main.py │ └── requirements.txt ├── start.sh ├── Dockerfile ├── docker-compose.yml └── .envdocker-compose.yml定义了两个服务共享一个桥接网络并挂载数据卷。version:3.8services:redis:image:redis:7-alpinecontainer_name:xiaolang-redisrestart:alwaysports:-6379:6379volumes:-redis_data:/datanetworks:-app_networkapp:build:.container_name:xiaolang-apprestart:alwaysdepends_on:-redisports:-8000:8000environment:-REDIS_URLredis://redis:6379/0-PYTHONUNBUFFERED1volumes:-app_logs:/app/logsnetworks:-app_networkvolumes:redis_data:app_logs:networks:app_network:driver:bridge关键点app通过depends_on确保 Redis 先启动。环境变量REDIS_URL中的主机名直接写redis利用 Compose 的内部 DNS。volumes定义了两个数据卷分别用于 Redis 数据持久化和应用日志。Dockerfile负责构建 Python 运行环境并拷贝代码。FROM python:3.11-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y curl rm -rf /var/lib/apt/lists/* # 复制依赖文件并安装 COPY app/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码和启动脚本 COPY app/ ./app/ COPY start.sh . # 赋予脚本执行权限 RUN chmod x start.sh EXPOSE 8000 CMD [./start.sh]start.sh在同一个容器中启动多个进程主应用 知识库文档服务。#!/bin/bashcd/app/app python main.py# 如果有另一个服务比如文档上传 API也可以在这里启动# python doc_server.py wait应用代码app/main.py提供一个简单的 FastAPI 接口演示 Redis 连接。importosfromfastapiimportFastAPIimportredis appFastAPI()# 从环境变量获取 Redis 地址容器内为 redis://redis:6379/0REDIS_URLos.getenv(REDIS_URL,redis://localhost:6379/0)rredis.from_url(REDIS_URL)app.get(/)defroot():return{message:小浪助手已启动}app.get(/memory/{key})defget_memory(key:str):valuer.get(key)ifvalue:return{key:key,value:value.decode()}return{key:key,value:None}app.post(/memory/{key})defset_memory(key:str,value:str):r.set(key,value)return{status:ok}requirements.txtfastapi0.115.0 uvicorn0.30.0 redis5.0.0启动与验证在项目根目录执行dockercompose up-d--build然后访问http://localhost:8000应该能看到欢迎信息。测试记忆读写curl-XPOSThttp://localhost:8000/memory/test_key?valuehellocurlhttp://localhost:8000/memory/test_key此时两个容器已经在运行日志可以通过docker compose logs -f查看。总结采用Docker Compose部署智能体应用不仅解决了环境一致性问题还通过服务名解析、依赖控制、数据卷等机制让多服务项目的运维变得简单可靠。本文提供的完整配置文件可直接用于生产环境的基础骨架稍加扩展即可支持更多服务如 Chroma 向量数据库、Prometheus 监控等。本文覆盖了 Docker 与 Docker Compose 的核心概念、docker-compose.yml 与 Dockerfile 的配置解析、服务间网络通信、数据持久化以及多进程启动等全部技术要点并提供了部署示例
返回列表