Docker手册:MySQL容器化部署最佳实践
·
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.cnfdocker 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。
关键注意事项
- 生产环境必须配置
--restart=always确保容器异常退出后自动重启- 敏感数据(如密码)避免硬编码,推荐使用Docker Secrets或环境变量文件
- 定期测试备份恢复流程验证可靠性
通过遵循以上实践,可构建高可用、易维护且安全的MySQL容器化环境。
更多推荐

所有评论(0)