Docker手册:MySQL容器化部署最佳实践

1. 镜像选择
  • 官方镜像优先:使用Docker Hub官方镜像mysql:tag,例如mysql:8.0或mysql:5.7。
  • 版本锁定:明确指定版本号避免兼容性问题。
  • 示例命令:
    docker pull mysql:8.0
    

2. 数据持久化
  • 卷挂载:容器内数据目录/var/lib/mysql必须挂载到宿主机,防止容器销毁时数据丢失。
  • 命名卷管理:推荐使用命名卷(优于绑定挂载)。
  • 示例命令:
    docker run -d \
      --name mysql-container \
      -v mysql-data:/var/lib/mysql \
      mysql:8.0
    

3. 配置文件管理
  • 自定义配置:将自定义my.cnf文件挂载到容器内/etc/mysql/conf.d目录。
  • 配置优先级:容器自动加载/etc/mysql/conf.d下的配置文件。
  • 示例目录结构:
    ├── custom-config
    │   └── my.cnf
    

    docker run -d \
      -v $(pwd)/custom-config:/etc/mysql/conf.d \
      mysql:8.0
    

4. 环境变量配置
  • 关键参数:通过环境变量初始化数据库:
    • MYSQL_ROOT_PASSWORD:root密码(强制要求)
    • MYSQL_DATABASE:初始数据库名
    • MYSQL_USER:初始用户名
    • MYSQL_PASSWORD:用户密码
  • 示例命令:
    docker run -d \
      -e MYSQL_ROOT_PASSWORD=secure_password \
      -e MYSQL_DATABASE=app_db \
      -e MYSQL_USER=app_user \
      -e MYSQL_PASSWORD=user_pass \
      mysql:8.0
    

5. 网络与端口
  • 端口映射:默认暴露端口3306,映射到宿主机端口。
  • 自定义网络:建议创建Docker自定义网络实现容器间安全通信。
  • 示例命令:
    docker network create mysql-net
    docker run -d \
      --network mysql-net \
      -p 3306:3306 \
      mysql:8.0
    

6. 安全性强化
  • 避免默认密码:禁止使用弱密码或空密码。
  • 最小权限原则:通过MYSQL_USER创建应用专用账户,避免直接使用root。
  • 定期更新:监控CVE漏洞并及时更新镜像版本。
7. 备份与恢复
  • 备份策略:
    docker exec mysql-container \
      mysqldump -u root -p"secure_password" app_db > backup.sql
    

  • 恢复数据:
    cat backup.sql | docker exec -i mysql-container \
      mysql -u root -p"secure_password" app_db
    

8. Docker Compose部署
version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-prod
    environment:
      MYSQL_ROOT_PASSWORD: secure_password
      MYSQL_DATABASE: app_db
      MYSQL_USER: app_user
      MYSQL_PASSWORD: user_pass
    volumes:
      - mysql-data:/var/lib/mysql
      - ./custom-config:/etc/mysql/conf.d
    ports:
      - "3306:3306"
    networks:
      - mysql-net

volumes:
  mysql-data:

networks:
  mysql-net:
    driver: bridge

9. 监控与日志
  • 查看日志:
    docker logs -f mysql-container
    

  • 性能监控:使用docker stats或集成Prometheus+Grafana。

关键注意事项

  1. 生产环境必须配置--restart=always确保容器异常退出后自动重启
  2. 敏感数据(如密码)避免硬编码,推荐使用Docker Secrets或环境变量文件
  3. 定期测试备份恢复流程验证可靠性

通过遵循以上实践,可构建高可用、易维护且安全的MySQL容器化环境。

更多推荐