Mysql部署流程
前期准备环境与目录布置系统环境要求部署前确认Docker Engine ≥20.10.14Docker Compose ≥2.17.0。执行docker --version和docker-compose --version验证版本。确保宿主机3306端口未被占用netstat -tlnp | grep 3306。磁盘空间建议预留20GBMySQL数据目录需chmod 755权限。对于生产环境建议使用SSD存储并配置合理的IO调度策略。项目目录规划创建标准化目录结构分离关注点mysql-docker-project/ ├── docker-compose.yml # 主配置文件 ├── data/ # 持久化数据目录映射/var/lib/mysql ├── conf/ # 自定义配置目录映射/etc/mysql/conf.d ├── init/ # 初始化SQL脚本目录 └── logs/ # 日志目录映射/var/log/mysql此结构确保配置、数据、日志独立管理便于备份和迁移。data/目录建议使用命名卷替代绑定挂载以提升性能。核心配置docker-compose.yml详解配置文件版本与语法结构Compose文件采用YAML格式版本声明决定可用特性。推荐version: 3.8兼容Docker Engine 19.03并支持所有现代功能。services块定义MySQL服务及其配置。MySQL服务配置要素镜像管理指定image: mysql:8.0使用MySQL 8.0 LTS版本。生产环境应固定具体版本号如mysql:8.0.36避免自动升级导致兼容性问题。开发环境可使用mysql:latest获取最新特性。端口映射ports: - 3306:3306将容器3306端口映射到宿主机。生产环境建议修改宿主机端口如3307:3306避免冲突或通过expose: - 3306仅内部暴露。重启策略restart: always确保容器异常退出时自动重启。unless-stopped策略在手动停止后不再重启适合需要维护的场景。数据持久化两种方案命名卷volumes: - mysql_data:/var/lib/mysql数据由Docker管理绑定挂载volumes: - ./data:/var/lib/mysql直接映射宿主机目录命名卷性能更优且便于备份推荐生产使用。环境变量关键初始化参数environment: MYSQL_ROOT_PASSWORD: StrongPass123! MYSQL_DATABASE: appdb MYSQL_USER: appuser MYSQL_PASSWORD: UserPass456 TZ: Asia/Shanghai首次启动时自动创建指定数据库和用户。密码应使用强密码并避免硬编码。实战配置示例基础部署模板version: 3.8 services: mysql: image: mysql:8.0 container_name: mysql-dev restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: mydb volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:生产级增强版本version: 3.8 services: mysql: image: mysql:8.0.36 container_name: mysql-prod restart: unless-stopped ports: - 3307:3306 environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} TZ: Asia/Shanghai volumes: - mysql_prod_data:/var/lib/mysql - ./conf:/etc/mysql/conf.d - ./logs:/var/log/mysql healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: memory: 2G cpus: 2 volumes: mysql_prod_data:生产配置引入健康检查、资源限制密码通过环境变量注入避免泄露。部署执行启动命令与操作流程一键启动与后台运行在docker-compose.yml所在目录执行docker-compose up -d-d参数使容器后台运行。启动过程输出日志显示初始化进度。验证服务状态docker-compose ps docker-compose logs -f mysql常用运维指令集服务管理docker-compose stop # 停止服务 docker-compose restart # 重启服务 docker-compose down # 停止并移除容器保留数据卷 docker-compose down -v # 停止并移除容器及数据卷容器操作docker-compose exec mysql mysql -uroot -p # 进入MySQL命令行 docker-compose top mysql # 查看进程资源使用连接测试与验证宿主机连接测试mysql -h 127.0.0.1 -P 3306 -u root -p输入配置的root密码成功连接即证明部署正常。容器内验证数据目录持久化docker-compose exec mysql ls -la /var/lib/mysql应看到数据库文件已生成。进阶配置高级功能与优化网络配置与内部通信创建自定义网络实现服务隔离networks: db-net: driver: bridge ipam: config: - subnet: 172.20.0.0/24服务声明networks: - db-net后同一网络内容器可通过服务名直接通信。时区与字符集优化确保时区一致环境变量TZ: Asia/Shanghai配合配置文件default-time-zone08:00。字符集统一UTF-8在conf/my.cnf中添加[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci启动初始化脚本SQL脚本放置于init/目录Compose自动执行volumes: - ./init:/docker-entrypoint-initdb.d容器首次启动时按字母顺序执行.sql、.sh文件实现数据库结构初始化。最佳实践与故障排查生产环境建议版本固定使用具体版本标签如mysql:8.0.36避免latest导致意外升级密码安全通过.env文件管理敏感信息禁止硬编码密码备份策略定期备份数据卷结合binlog实现时间点恢复常见问题诊断端口冲突修改宿主机端口映射或停止占用进程连接失败检查防火墙规则验证容器网络配置权限问题确保挂载目录权限正确chown -R 999:999数据异常验证卷挂载路径检查磁盘空间结尾总结与扩展应用Docker Compose将MySQL部署简化为声明式配置实现环境一致性、快速部署和数据持久化。后续可集成监控工具Prometheusmysqld_exporter、自动备份方案或扩展为高可用集群主从复制、Group Replication构建完整的数据服务栈。