使用Docker Compose编排vLLM-v0.17.1与MySQL数据库服务
1. 引言
在AI应用开发中,我们经常需要将大模型服务与数据库系统结合起来使用。今天我要分享的是如何用Docker Compose快速搭建一个包含vLLM推理服务和MySQL数据库的完整环境。这种方法特别适合需要将模型能力与业务数据结合的场景,比如个性化推荐系统、智能客服等。
通过本教程,你将学会:
- 如何编写一个完整的docker-compose.yml文件
- 如何配置vLLM服务与MySQL的交互
- 如何实现服务的一键启动和统一管理
整个过程只需要10分钟左右,跟着步骤走就能完成部署。即使你是Docker新手也不用担心,我会用最直白的语言解释每个配置项的作用。
2. 环境准备
2.1 系统要求
在开始之前,请确保你的系统满足以下条件:
- 已安装Docker(版本20.10.0或更高)
- 已安装Docker Compose(版本1.29.0或更高)
- 至少16GB内存(vLLM运行需要较多内存)
- 50GB可用磁盘空间(用于存储模型和数据库)
2.2 快速检查环境
打开终端,运行以下命令检查环境是否就绪:
docker --version docker-compose --version如果两个命令都能正确输出版本号,说明环境已经准备好。
3. 编写docker-compose.yml文件
3.1 创建项目目录
首先创建一个项目目录,所有文件都将放在这里:
mkdir vllm-mysql-stack && cd vllm-mysql-stack3.2 编写核心配置文件
创建一个名为docker-compose.yml的文件,内容如下:
version: '3.8' services: vllm: image: vllm/vllm-openai:v0.17.1 container_name: vllm_service ports: - "8000:8000" volumes: - ./models:/models environment: - MODEL=/models/vicuna-7b-v1.5 - HOST=0.0.0.0 - PORT=8000 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] depends_on: - mysql networks: - app_network mysql: image: mysql:8.0 container_name: mysql_db ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql environment: - MYSQL_ROOT_PASSWORD=your_secure_password - MYSQL_DATABASE=vllm_app - MYSQL_USER=app_user - MYSQL_PASSWORD=app_password networks: - app_network volumes: mysql_data: networks: app_network: driver: bridge3.3 配置文件详解
让我们分解这个配置文件的关键部分:
vLLM服务配置:
- 使用官方vLLM镜像(v0.17.1版本)
- 将8000端口映射到主机
- 挂载models目录用于存放模型文件
- 配置环境变量指定模型路径和服务端口
- 声明需要GPU资源
MySQL服务配置:
- 使用MySQL 8.0官方镜像
- 将3306端口映射到主机
- 使用数据卷持久化存储数据库
- 初始化数据库用户和密码
- 挂载初始化SQL脚本
网络配置:
- 创建专用网络
app_network - 两个服务都加入同一网络,可以直接通过服务名互相访问
- 创建专用网络
4. 准备初始化文件
4.1 创建模型目录
mkdir models将你的模型文件(如vicuna-7b-v1.5)放入models目录。如果没有现成模型,vLLM会自动下载。
4.2 创建数据库初始化脚本
创建mysql目录和初始化脚本:
mkdir mysql && touch mysql/init.sql编辑init.sql文件,添加你需要的表结构和初始数据。例如:
CREATE TABLE IF NOT EXISTS model_requests ( id INT AUTO_INCREMENT PRIMARY KEY, prompt TEXT NOT NULL, response TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );5. 启动服务
5.1 一键启动所有服务
在项目目录下运行:
docker-compose up -d这个命令会:
- 拉取所需的镜像(如果本地没有)
- 创建网络和卷
- 按依赖顺序启动服务(先启动MySQL,再启动vLLM)
5.2 查看服务状态
要查看服务是否正常运行:
docker-compose ps你应该看到两个服务的状态都是"up"。
5.3 查看服务日志
要查看实时日志:
docker-compose logs -f按Ctrl+C退出日志查看。
6. 验证服务
6.1 验证vLLM服务
vLLM服务提供了OpenAI兼容的API。你可以用curl测试:
curl http://localhost:8000/v1/models应该会返回类似这样的响应:
{ "object": "list", "data": [ { "id": "vicuna-7b-v1.5", "object": "model", "created": 1686935002, "owned_by": "vllm" } ] }6.2 验证MySQL服务
可以使用MySQL客户端连接数据库:
mysql -h 127.0.0.1 -P 3306 -u app_user -p输入密码app_password后,你应该能成功连接到数据库。
7. 使用技巧
7.1 服务间通信
在vLLM容器中,你可以直接使用mysql作为主机名访问MySQL服务,因为它们在同一个Docker网络中。
7.2 持久化存储
MySQL数据会保存在名为mysql_data的Docker卷中,即使容器重启数据也不会丢失。
7.3 资源监控
要查看服务资源使用情况:
docker stats7.4 停止和清理
停止服务:
docker-compose down要完全清理(包括数据卷):
docker-compose down -v8. 总结
通过这个教程,我们成功搭建了一个包含vLLM推理服务和MySQL数据库的完整环境。这种组合特别适合需要将大模型能力与结构化数据结合的应用场景,比如:
- 存储用户与模型的交互历史
- 记录模型推理结果用于后续分析
- 构建基于用户数据的个性化模型服务
实际使用中,你可能需要根据具体需求调整配置,比如更换模型、增加数据库表等。这个基础架构已经为你提供了一个很好的起点,可以在此基础上继续开发更复杂的功能。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。