Docker化部署全攻略:在任意Linux系统快速搭建MySQL+Ollama服务群

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

Docker化部署全攻略:在任意Linux系统快速搭建MySQL+Ollama服务群

引言

在现代开发环境中,Docker已经成为部署服务的标准工具。本文将带你使用Docker在任意Linux系统上快速搭建MySQL数据库和Ollama(一个流行的开源项目)服务群。通过容器化部署,你可以轻松实现环境隔离、快速部署和便捷迁移。

准备工作

在开始之前,请确保你的Linux系统满足以下要求:

  • 任何主流Linux发行版(Ubuntu/CentOS/Debian等)
  • Docker已安装(版本18.06+)
  • Docker Compose已安装(版本1.25.0+)
  • 至少2GB可用内存
  • root或sudo权限

检查Docker环境

代码片段
# 检查Docker版本
docker --version

# 检查Docker Compose版本
docker-compose --version

如果尚未安装,可以使用以下命令安装:

代码片段
# Ubuntu/Debian系统安装Docker
sudo apt-get update
sudo apt-get install docker.io docker-compose -y
sudo systemctl enable --now docker

# CentOS/RHEL系统安装Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
sudo systemctl enable --now docker

第一步:创建项目目录结构

合理的目录结构能让后续管理更加方便:

代码片段
mkdir -p docker-mysql-ollama/{mysql,ollama,config}
cd docker-mysql-ollama

目录说明:
mysql/: MySQL相关文件和配置
ollama/: Ollama服务相关文件
config/: 共享配置文件

第二步:配置MySQL容器

1. 创建MySQL配置文件

代码片段
cat > config/mysql.cnf << 'EOF'
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_authentication_plugin=mysql_native_password

[client]
default-character-set=utf8mb4
EOF

2. 编写docker-compose.yml文件

代码片段
version: '3.8'

services:
  mysql:
    image: mysql:8.0 # 使用官方MySQL镜像,版本8.0
    container_name: mysql_container # 指定容器名称便于管理

    # MySQL配置参数通过环境变量传递(生产环境建议使用secrets)
    environment:
      MYSQL_ROOT_PASSWORD: "your_secure_password" # root密码,请修改为强密码!
      MYSQL_DATABASE: "ollama_db" # 自动创建的数据库名

    # 挂载配置文件和数据卷实现持久化存储    
    volumes:
      - ./config/mysql.cnf:/etc/mysql/conf.d/custom.cnf # MySQL自定义配置挂载点 
      - ./mysql/data:/var/lib/mysql # MySQL数据持久化存储

    ports:
      - "3306:3306" # 将容器3306端口映射到主机3306端口

    networks:
      - ollama_network # 使用自定义网络便于服务间通信

    restart: unless-stopped # Docker重启时自动启动容器

networks:
  ollama_network: # 定义网络供多个服务使用  
    driver: bridge  

注意事项
1. MYSQL_ROOT_PASSWORD必须修改为强密码,生产环境建议使用Docker secrets管理敏感信息。
2. MySQL数据存储在./mysql/data目录下,删除容器不会丢失数据。
3. restart: unless-stopped确保服务意外停止时会自动重启。

3. 启动MySQL服务

代码片段
docker-compose up -d mysql

检查运行状态:

代码片段
docker ps | grep mysql_container

# 查看日志确认启动正常(Ctrl+C退出)
docker logs -f mysql_container 

第三步:部署Ollama服务

Ollama是一个开源项目,我们将使用其官方镜像进行部署。

1. Ollama的docker-compose配置扩展

编辑现有的docker-compose.yml文件,在services:部分添加以下内容:

代码片段
services:

   ollama:
     image: ollama/ollama:latest # Ollama官方镜像最新版  
     container_name: ollama_container  

     environment:
       OLLAMA_HOST: "0.0.0.0" # Ollama监听地址  
       OLLAMA_PORT: "11434"   # Ollama默认端口  

     volumes:
       - ./ollama/models:/root/.ollama/models # Ollama模型存储位置持久化  

     ports:
       - "11434:11434"        # Ollama API端口映射到主机  

     networks:
       - ollama_network       # 使用与MySQL相同的网络  

     depends_on:
       - mysql               # Ollam依赖MySQL先启动  

     restart: unless-stopped  

2. Ollama与MySQL的连接配置(可选)

如果需要Ollam连接MySQL数据库,可以创建额外的配置文件:

代码片段
cat > config/ollamaconfig.yaml << 'EOF'
database:
   host: "mysql_container"   # Docker网络中使用容器名作为主机名  
   port: "3306"
   name: "ollamadb"
   user: "root"
   password: "${DB_PASSWORD}" 
EOF 

然后在docker-compose.yml的Ollam服务部分添加环境变量引用:

代码片段
environment:
   DB_PASSWORD_FILE: /run/secrets/db_root_password  

secrets:
   db_root_password:
     file: ./secrets/db_root_password.txt 

创建密码文件(确保不被提交到版本控制):

代码片段
mkdir secrets && echo "your_secure_password" > secrets/db_root_password.txt 
chmod 600 secrets/db_root_password.txt 

3.启动全部服务

代码片段
docker-compose up -d   

验证所有容器正常运行:

代码片段
docker ps 

CONTAINER ID   IMAGE                COMMAND                  STATUS         PORTS                                NAMES   
a1b2c3d4e5f6   ollamalatest         "/bin/sh -c './start…"   Up5minutes    0.0.0.:11434->11434/tcp             ollamcontainer   
z9y8x7w6v5u4   mysql:.              "docker-entrypoint.s…"   Up5minutes    0..:.3306->3306/tcp,33060/tcp       mysqlcontainer   

第四步:验证和测试

1.MySQL连接测试

进入MySQL容器执行命令:

代码片段
dockerexecit mysqlcontainer bash 

#在容器内连接MySQL  
mysqlurootp"${MYSQLROOTPASSWORD}" 

#执行简单SQL查询验证数据库是否正常   
SHOW DATABASES; 

+-------------------+
| Database          |
+-------------------+
| information_schema|
| mysql             |
| performance_schema|
| sys               |
| ollamadb          |
+-------------------+
5rowsinset(.sec) 

exit; //退出MySQL客户端   
exit //退出容器终端   

2.OllamAPI测试

使用curl测试API端点是否可用:

代码片段
curlhttp://localhost:.11434/api/status 

{"status":"OK","message":"Serviceisrunning"} 

如果返回类似上面的JSON响应表示Ollam服务正常运行。

第五步:管理和维护

1常用命令汇总

停止所有服务但不删除数据:

代码片段
dockercomposestop    

重新启动服务:

代码片段
dockercomposestart    

完全删除所有容器(但保留数据卷):

代码片段
dockercomposedown    

查看日志实时输出:

代码片段
dockerlogsfallamamcontainer//查看Ollam日志    
dockelogsfmysqlcontainer//查看MySQL日志    

进入容器shell进行调试:

代码片段
dockerexecitmysqlcontainer bash//进入MySQL容器的shell环境    

常见问题解决方案

问题1:端口冲突错误

解决方案1:修改ports:映射为其他未占用端口如13306:.3306

解决方案2:停止占用端口的本地服务

问题2:磁盘空间不足

解决方案1:清理不需要的镜像和容器

代码片段
dockersystemprunea//清理所有未使用的对象      

解决方案2:将数据卷挂载到大容量磁盘分区

问题3:权限问题导致无法写入卷

解决方案1:确保宿主机目录可写

代码片段
chmod777./mysql/data//临时解决方案开发环境用        
chown1001:.1001./mysql/data//更安全的方案        

解决方案2:在compose文件中指定用户ID

代码片段
user:"1001".1001""        
volumes:.       
"./mysql/data:/var/lib/mysql".       

总结

通过本教程我们完成了以下工作:

✅使用DockerCompose编排多容器应用
✅部署了生产级MySQL数据库并实现持久化存储
✅集成了Ollam开源项目并与数据库连接
✅掌握了基本的Docker管理和故障排查技巧

关键点回顾:
• DockerCompose是管理多容器的理想工具
•数据卷(volumes)确保重要数据不会随容器销毁而丢失
•自定义网络(networks)简化了服务间通信
•环境变量和配置文件分离提高了安全性

下一步建议:
•学习如何备份和恢复Docker数据卷
•探索Kubernetes实现更复杂的编排需求
•为生产环境添加监控和日志收集功能

原创 高质量