图搞定Docker 安装 MySQL8.0:从零到一的完整指南

作者:rousong2025.11.06 14:08浏览量:0

简介:本文通过分步图解与详细说明,指导开发者在Docker环境中快速部署MySQL8.0数据库,涵盖镜像拉取、容器配置、持久化存储及基础运维操作,适合不同技术背景的读者实践。

图搞定Docker安装MySQL8.0:从零到一的完整指南

云计算与容器化技术快速发展的今天,Docker凭借其轻量级、可移植的特性,已成为开发者部署数据库的首选工具。本文将以图解+代码示例的形式,详细说明如何通过Docker快速安装并配置MySQL8.0数据库,覆盖从环境准备到基础运维的全流程,帮助读者高效完成部署。

一、环境准备:Docker与基础工具安装

1.1 安装Docker引擎

在Linux(Ubuntu/CentOS)、Windows或macOS系统上安装Docker是第一步。以Ubuntu为例:

  1. # 更新软件包索引
  2. sudo apt update
  3. # 安装依赖包
  4. sudo apt install apt-transport-https ca-certificates curl software-properties-common
  5. # 添加Docker官方GPG密钥
  6. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  7. # 添加Docker仓库
  8. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  9. # 安装Docker引擎
  10. sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io
  11. # 验证安装
  12. sudo docker run hello-world

关键点

  • 确保系统内核版本≥4.4(Linux)或Docker Desktop版本≥4.0(Windows/macOS)。
  • 添加用户到docker组以避免sudosudo usermod -aG docker $USER)。

1.2 验证Docker运行状态

执行以下命令检查Docker服务状态:

  1. sudo systemctl status docker

输出应显示active (running),若未启动则执行:

  1. sudo systemctl start docker

二、拉取MySQL8.0官方镜像

2.1 搜索并选择镜像版本

通过Docker Hub搜索MySQL镜像:

  1. docker search mysql

选择官方镜像(mysql/mysql-server)或社区镜像(mysql:8.0),推荐使用稳定版标签:

  1. docker pull mysql:8.0

版本选择建议

  • 生产环境使用mysql:8.0.33等具体版本号,避免latest标签的潜在不兼容性。
  • 轻量级需求可考虑mysql:8.0-oracle(Oracle官方镜像)或arm64v8/mysql:8.0(ARM架构)。

2.2 验证镜像完整性

检查已拉取的镜像:

  1. docker images

输出应包含mysql8.0标签的条目,大小约500MB。

三、运行MySQL8.0容器

3.1 基础命令启动

使用以下命令启动容器(不推荐生产环境直接使用):

  1. docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0

参数解析

  • --name mysql8:指定容器名称。
  • -e MYSQL_ROOT_PASSWORD:设置root用户密码(必填)。
  • -d:后台运行容器。

3.2 生产级配置(推荐)

通过挂载配置文件和数据目录实现持久化与自定义配置:

  1. # 创建本地数据目录和配置文件
  2. mkdir -p ~/mysql/data ~/mysql/conf
  3. echo "[mysqld]
  4. character-set-server=utf8mb4
  5. collation-server=utf8mb4_unicode_ci" > ~/mysql/conf/my.cnf
  6. # 启动容器并挂载目录
  7. docker run --name mysql8 \
  8. -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  9. -v ~/mysql/data:/var/lib/mysql \
  10. -v ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf \
  11. -p 3306:3306 \
  12. -d mysql:8.0

关键配置项

  • -v ~/mysql/data:/var/lib/mysql:持久化数据到本地,避免容器删除后数据丢失。
  • -v ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf:覆盖默认配置(如字符集、日志)。
  • -p 3306:3306:映射主机端口到容器端口,允许外部连接。

四、连接与测试MySQL

4.1 进入容器交互终端

  1. docker exec -it mysql8 mysql -uroot -p

输入密码后进入MySQL命令行,执行:

  1. SHOW VARIABLES LIKE 'character_set%';

验证字符集是否为utf8mb4

4.2 使用客户端工具连接

  • 本地连接:通过mysql -h127.0.0.1 -uroot -p连接。
  • 远程连接:修改配置文件添加bind-address=0.0.0.0,并创建远程用户:
    1. CREATE USER 'remote'@'%' IDENTIFIED BY 'remote-password';
    2. GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%';
    3. FLUSH PRIVILEGES;

五、运维与常见问题

5.1 日志查看与故障排查

  1. # 查看容器日志
  2. docker logs mysql8
  3. # 实时日志跟踪
  4. docker logs -f mysql8

常见错误

  • 密码错误:检查MYSQL_ROOT_PASSWORD是否包含特殊字符(需转义)。
  • 端口冲突:确保主机3306端口未被占用(netstat -tulnp | grep 3306)。
  • 数据目录权限:本地数据目录需赋予Docker用户权限(chown -R 999:999 ~/mysql/data)。

5.2 备份与恢复

备份

  1. docker exec mysql8 sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --all-databases' > ~/mysql/backup.sql

恢复

  1. cat ~/mysql/backup.sql | docker exec -i mysql8 mysql -uroot -p"$MYSQL_ROOT_PASSWORD"

六、进阶配置建议

6.1 资源限制

通过--memory--cpus限制容器资源:

  1. docker run --name mysql8 \
  2. --memory="2g" \
  3. --cpus="1.5" \
  4. -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  5. -d mysql:8.0

6.2 使用Docker Compose

创建docker-compose.yml文件:

  1. version: '3.8'
  2. services:
  3. mysql:
  4. image: mysql:8.0
  5. container_name: mysql8
  6. environment:
  7. MYSQL_ROOT_PASSWORD: my-secret-pw
  8. volumes:
  9. - ~/mysql/data:/var/lib/mysql
  10. - ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf
  11. ports:
  12. - "3306:3306"
  13. restart: unless-stopped

执行docker-compose up -d启动服务。

七、总结与最佳实践

  1. 持久化存储:务必挂载数据目录,避免容器删除导致数据丢失。
  2. 安全配置:禁用root远程登录,使用专用用户并限制IP访问。
  3. 监控:结合Prometheus+Grafana监控MySQL性能指标(如mysql_exporter)。
  4. 更新策略:定期拉取新版本镜像(docker pull mysql:8.0.34),并通过测试环境验证后再升级生产环境。

通过以上步骤,开发者可在10分钟内完成MySQL8.0的Docker部署,并具备基础运维能力。实际项目中,建议结合CI/CD流水线自动化这一过程,进一步提升效率。