简介:本文通过分步图解与详细说明,指导开发者在Docker环境中快速部署MySQL8.0数据库,涵盖镜像拉取、容器配置、持久化存储及基础运维操作,适合不同技术背景的读者实践。
在云计算与容器化技术快速发展的今天,Docker凭借其轻量级、可移植的特性,已成为开发者部署数据库的首选工具。本文将以图解+代码示例的形式,详细说明如何通过Docker快速安装并配置MySQL8.0数据库,覆盖从环境准备到基础运维的全流程,帮助读者高效完成部署。
在Linux(Ubuntu/CentOS)、Windows或macOS系统上安装Docker是第一步。以Ubuntu为例:
# 更新软件包索引sudo apt update# 安装依赖包sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加Docker仓库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# 安装Docker引擎sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io# 验证安装sudo docker run hello-world
关键点:
docker组以避免sudo(sudo usermod -aG docker $USER)。执行以下命令检查Docker服务状态:
sudo systemctl status docker
输出应显示active (running),若未启动则执行:
sudo systemctl start docker
通过Docker Hub搜索MySQL镜像:
docker search mysql
选择官方镜像(mysql/mysql-server)或社区镜像(mysql:8.0),推荐使用稳定版标签:
docker pull mysql:8.0
版本选择建议:
mysql:8.0.33等具体版本号,避免latest标签的潜在不兼容性。 mysql:8.0-oracle(Oracle官方镜像)或arm64v8/mysql:8.0(ARM架构)。检查已拉取的镜像:
docker images
输出应包含mysql和8.0标签的条目,大小约500MB。
使用以下命令启动容器(不推荐生产环境直接使用):
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0
参数解析:
--name mysql8:指定容器名称。 -e MYSQL_ROOT_PASSWORD:设置root用户密码(必填)。 -d:后台运行容器。通过挂载配置文件和数据目录实现持久化与自定义配置:
# 创建本地数据目录和配置文件mkdir -p ~/mysql/data ~/mysql/confecho "[mysqld]character-set-server=utf8mb4collation-server=utf8mb4_unicode_ci" > ~/mysql/conf/my.cnf# 启动容器并挂载目录docker run --name mysql8 \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-v ~/mysql/data:/var/lib/mysql \-v ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf \-p 3306:3306 \-d mysql:8.0
关键配置项:
-v ~/mysql/data:/var/lib/mysql:持久化数据到本地,避免容器删除后数据丢失。 -v ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf:覆盖默认配置(如字符集、日志)。 -p 3306:3306:映射主机端口到容器端口,允许外部连接。
docker exec -it mysql8 mysql -uroot -p
输入密码后进入MySQL命令行,执行:
SHOW VARIABLES LIKE 'character_set%';
验证字符集是否为utf8mb4。
mysql -h127.0.0.1 -uroot -p连接。 bind-address=0.0.0.0,并创建远程用户:
CREATE USER 'remote'@'%' IDENTIFIED BY 'remote-password';GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%';FLUSH PRIVILEGES;
# 查看容器日志docker logs mysql8# 实时日志跟踪docker logs -f mysql8
常见错误:
MYSQL_ROOT_PASSWORD是否包含特殊字符(需转义)。 netstat -tulnp | grep 3306)。 chown -R 999:999 ~/mysql/data)。备份:
docker exec mysql8 sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --all-databases' > ~/mysql/backup.sql
恢复:
cat ~/mysql/backup.sql | docker exec -i mysql8 mysql -uroot -p"$MYSQL_ROOT_PASSWORD"
通过--memory和--cpus限制容器资源:
docker run --name mysql8 \--memory="2g" \--cpus="1.5" \-e MYSQL_ROOT_PASSWORD=my-secret-pw \-d mysql:8.0
创建docker-compose.yml文件:
version: '3.8'services:mysql:image: mysql:8.0container_name: mysql8environment:MYSQL_ROOT_PASSWORD: my-secret-pwvolumes:- ~/mysql/data:/var/lib/mysql- ~/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnfports:- "3306:3306"restart: unless-stopped
执行docker-compose up -d启动服务。
root远程登录,使用专用用户并限制IP访问。 mysql_exporter)。 docker pull mysql:8.0.34),并通过测试环境验证后再升级生产环境。通过以上步骤,开发者可在10分钟内完成MySQL8.0的Docker部署,并具备基础运维能力。实际项目中,建议结合CI/CD流水线自动化这一过程,进一步提升效率。