Docker 环境搭建 (一):全平台通用 MySQL 8.0 高性能部署方案

1. 项目目录规范 (跨平台)

良好的目录结构是环境迁移的基础。无论是在 Windows 的盘符下,还是 Unix 系的家目录中,建议统一采用如下组织方式:

my-dev-env/                # 本地开发环境总目录
├── mysql/                 # MySQL 服务专用目录
│   ├── docker-compose.yml # 核心编排文件
│   ├── data/              # 数据库持久化目录 (自动生成)
│   └── conf/              # 自定义配置文件挂载点 (可选)
└── ...                    # 其他服务 (Redis, Nginx等)

2. 编写高性能 Docker Compose 配置

mysql 目录下创建 docker-compose.yml。本配置集成了资源配额健康检查日志管理,确保数据库在全平台运行的稳定性。

version: '3.8'

services:
  db:
    image: mysql:8.0.33
    container_name: mysql-server
    restart: always
    ports:
      - "3306:3306"
    volumes:
      # 挂载数据目录,实现数据持久化
      - ./data:/var/lib/mysql
      # (可选) 挂载自定义配置文件
      - ./conf:/etc/mysql/conf.d
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: "YourSecurePassword"
      MYSQL_DATABASE: "app_db"
      MYSQL_USER: "dev_user"
      MYSQL_PASSWORD: "DevPassword"
    
    # 核心性能调优:支持 utf8mb4 并解决旧版客户端连接兼容性
    command: 
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password
      - --innodb_buffer_pool_size=512M # 建议设为系统可用内存的 10%-25%
      - --max_connections=500
    
    # 资源配额:防止本地开发时异常查询榨干宿主机内存
    deploy:
      resources:
        limits:
          memory: 1024M
    
    # 健康检查:确保容器状态对外部链路透明
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
      timeout: 10s
      retries: 5

    # 日志轮转:防止 Docker 日志撑爆磁盘空间
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

3. 跨平台部署细节解析

3.1 路径处理的艺术

在 YAML 中使用相对路径 ./data

  • Windows/macOS:路径会被自动映射到 Docker 虚拟化后端的对应位置。
  • Linux:直接映射到当前 Shell 工作目录。 这种写法保证了你直接将 my-dev-env 文件夹通过 Git 或云盘同步后,在任何系统都能“一键启动”。

3.2 MySQL 8.0 身份验证升级

MySQL 8.0 默认使用 caching_sha2_password。如果你的连接工具(如旧版 Navicat、DBeaver 或老旧的 JDBC 驱动)报错,配置中的 --default-authentication-plugin=mysql_native_password 是最有效的“救命稻草”。

3.3 内存限制 (Limit) 的重要性

  • Windows/macOS:Docker 运行在受控的虚拟化环境中,不加限制可能导致虚拟机内存膨胀,间接让宿主机卡顿。
  • Linux:Docker 原生运行,不加限制可能导致 OOM Killer 误杀系统关键进程。

4. 管理指令 (现代语法)

推荐使用 Docker V2 引入的 docker compose 指令(不再需要连字符):

# 1. 启动服务 (后台运行)
docker compose up -d

# 2. 实时查看启动日志
docker compose logs -f

# 3. 确认容器健康状态
docker compose ps

# 4. 停止并清理容器 (保留数据)
docker compose down
查询示例 ◎ 查询示例

结语

跨平台的环境一致性是 Docker 的灵魂。通过这份配置,你可以在 Windows 开发、macOS 演示、Linux 部署。下一篇我们将引入 Redis,并展示如何利用 Docker Bridge Network 实现多容器间的“零延迟”通信。

加载评论