最新macOS Ventura教程:用Docker同时运行MySQL和Ollama大模型服务

云信安装大师
90
AI 质量分
11 5 月, 2025
3 分钟阅读
0 阅读

最新macOS Ventura教程:用Docker同时运行MySQL和Ollama大模型服务

引言

在macOS Ventura上同时运行数据库和大语言模型服务是许多AI开发者的需求。本文将教你如何使用Docker容器技术,在本地轻松部署MySQL数据库和Ollama大模型服务。这种方法既能保持环境隔离,又不会污染你的主机系统。

准备工作

系统要求

  • macOS Ventura (13.0或更高版本)
  • 至少16GB内存(运行大模型需要较多内存)
  • Docker Desktop for Mac已安装(下载地址

前置知识

  • 基本终端命令行操作
  • Docker基础概念(镜像、容器、端口映射等)

安装Docker Desktop

  1. 从官网下载Docker Desktop for Mac
  2. 双击下载的.dmg文件进行安装
  3. 将Docker图标拖到Applications文件夹
  4. 启动Docker应用,等待鲸鱼图标出现在状态栏

验证安装:

代码片段
docker --version
# 应显示类似: Docker version 24.0.5, build ced0996

配置Docker资源

由于要运行大模型,建议调整Docker资源配置:
1. 点击状态栏Docker图标 → Preferences → Resources
2. CPU: 建议4核以上
3. Memory: 至少8GB(如果运行更大的模型需要更多)
4. Swap: 2GB
5. Disk image size: 至少64GB

部署MySQL容器

拉取MySQL镜像

代码片段
docker pull mysql:8.0

运行MySQL容器

代码片段
docker run --name mysql-server \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-p 3306:3306 \
-v ~/docker/mysql-data:/var/lib/mysql \
-d mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

参数说明:
--name: 容器名称
-e MYSQL_ROOT_PASSWORD: root用户密码(请替换yourpassword)
-p: 端口映射(主机端口:容器端口)
-v: 数据卷挂载(持久化数据)
--character-set-server: UTF8MB4支持emoji和完整unicode字符集

验证MySQL运行

代码片段
docker ps 
# 应看到mysql容器正在运行

# 进入MySQL命令行
docker exec -it mysql-server mysql -uroot -p
# Enter password: yourpassword (输入上面设置的密码)

部署Ollama大模型服务

Ollama是一个本地运行大型语言模型的工具,支持多种开源模型。

拉取Ollama镜像

代码片段
docker pull ollama/ollama

运行Ollama容器

代码片段
docker run --name ollama \
-p 11434:11434 \
-v ~/.ollama:/root/.ollama \
-d ollama/ollama

参数说明:
11434是Ollama默认API端口
~/.ollama挂载点用于保存下载的模型文件

Ollama基本使用

  1. 进入容器终端:
代码片段
docker exec -it ollama bash 
  1. 下载并运行Llama2模型(7B参数版本):
代码片段
ollama pull llama2 
ollama run llama2 
  1. 测试API(在主机终端):
代码片段
curl http://localhost:11434/api/generate -d '{
 "model": "llama2",
 "prompt": "为什么天空是蓝色的?",
 "stream": false 
}'

Docker Compose整合方案

为了更方便管理多个服务,我们可以使用docker-compose.yml文件:

  1. 创建docker-compose.yml文件:
代码片段
version: '3'

services:

 mysql:
   image: mysql:8.0  
   container_name: mysql-server  
   environment:
     MYSQL_ROOT_PASSWORD: yourpassword  
   ports:
     - "3306:3306"
   volumes:
     - ~/docker/mysql-data:/var/lib/mysql  
   command:
     --character-set-server=utf8mb4  
     --collation-server=utf8mb4_unicode_ci  

 ollama:
   image: ollama/ollama  
   container_name: ollama  
   ports:
     - "11434:11434"  
   volumes:
     - ~/.ollama:/root/.ollama  
   deploy:
     resources:
       reservations:
         memory: "10G" # Ollama需要更多内存资源 
  1. 启动服务:
代码片段
docker-compose up -d 
  1. 停止服务:
代码片段
docker-compose down 

Python连接示例

以下是一个Python脚本示例,同时连接MySQL和Ollama:

代码片段
import pymysql.cursors  
import requests  

# MySQL连接配置  
mysql_config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'yourpassword',
    'database': 'test_db',
    'charset': 'utf8mb4'
}  

# Ollama API配置  
OLLAMA_URL = "http://localhost:11434/api/generate"  

def setup_database():
    """初始化数据库"""
    connection = pymysql.connect(**mysql_config)  
    try:
        with connection.cursor() as cursor:
            # Create database if not exists  
            cursor.execute("CREATE DATABASE IF NOT EXISTS test_db")  
            cursor.execute("USE test_db")  

            # Create table for storing prompts and responses  
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS ai_responses (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    prompt TEXT NOT NULL,
                    response TEXT NOT NULL,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP    
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
            """)  
        connection.commit()  
    finally:
        connection.close()  

def query_ollama(prompt):
    """向Ollama发送查询"""
    payload = {
        "model": "llma2",
        "prompt": prompt,
        "stream": False   
    }    
    response = requests.post(OLLAMA_URL, json=payload)    
    return response.json().get('response', '').strip()  

def save_to_mysql(prompt, response):
    """保存结果到MySQL"""    
    connection = pymysql.connect(**mysql_config)    
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO ai_responses (prompt, response) VALUES (%s, %s)"    
            cursor.execute(sql, (prompt, response))    
        connection.commit()    
    finally:
        connection.close()    

if __name__ == "__main__":
    setup_database()    

    while True:
        user_input = input("\n请输入问题(输入q退出): ")    
        if user_input.lower() == 'q':
            break

        # Get response from Ollma        
        print("\n思考中...")        
        response = query_ollma(user_input)        
        print(f"\n回答:\n{response}")        

        # Save to database        
        save_to_mysql(user_input, response)        
        print("\n已保存到数据库!")

FAQ与问题排查

MySQL相关问题

Q1: MySQL连接失败?
– ✅检查密码是否正确(yourpassword)
– ✅检查端口是否被占用(lsof -i :3306)
– ✅尝试重启容器(docker restart mysql-server)

Q2: MySQL中文乱码?
– ✅确保创建数据库时指定了utf8mb4字符集

Ollma相关问题

Q1: Ollma响应慢?
– ✅检查可用内存(docker stats)
– ✅尝试更小的模型(如tinyllma)
– ✅调整Python请求超时时间

Q2: API返回404错误?
– ✅确保容器正在运行(docker ps)
– ✅检查端口映射是否正确

性能优化建议

  1. 资源分配

    代码片段
    docker update --memory="12G" --memory-swap="14G" ollma   
    
  2. 使用GPU加速(如果有M系列芯片)

    代码片段
    # docker-compose.yml中添加:
    deploy:
      resources:
        devices:
          - driver: nvidia # Apple Silicon可能需要不同配置   
            count: all   
            capabilities: [gpu]   
    
  3. 模型量化

    代码片段
    ollma pull llma2:text-chat-q5_K_M # Q5量化版本   
    

总结

通过本教程,你学会了如何在macOS Ventura上:

1️⃣使用Docker部署MySQL数据库服务
2️⃣配置并运行Ollma大语言模型
3️⃣通过Docker Compose管理多服务
4️⃣编写Python脚本整合两者功能

这种方案的优势在于环境隔离、一键部署和数据持久化。你可以基于此搭建更复杂的AI应用开发环境。

原创 高质量