前言
在阿里云服务器上部署 MySQL 是开发者常见的场景。相比于手动安装,使用 Docker 部署 MySQL 8.0 具有环境隔离、快速部署、易于迁移等优势。但在实际操作中,我们经常会遇到镜像拉取慢、密码配置失效以及远程连接不上等“坑”。
本文将手把手带你基于 Alibaba Cloud Linux 3(及兼容的 CentOS/RHEL 系统),完成 Docker 安装、镜像加速配置、MySQL 容器部署,并解决远程连接和安全组配置问题。
🛠️ 第一阶段:环境准备与 Docker 安装
首先,我们需要检查系统环境并安装 Docker。如果你使用的是 Alibaba Cloud Linux 3,请务必注意兼容性插件的安装。
1. 检查系统版本
首先确认你的发行版信息,确保后续命令匹配:
bash
cat /etc/os-release
2. 安装 Docker CE
推荐使用官方源配合阿里云镜像进行安装。请依次执行以下命令:
bash
1. 更新系统软件包
sudo dnf update -y
2. 卸载旧版本(防止冲突)
sudo dnf remove -y docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate \
docker-engine
3. 添加 Docker CE 官方源(使用阿里云镜像加速)
sudo dnf config-manager --add-repo=mirrors.aliyun.com/docker-ce/l…
4. 【重要】安装 Alibaba Cloud Linux 3 专用的兼容插件
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
5. 安装 Docker CE(社区版)及相关组件
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
3. 验证安装结果
检查 Docker 是否正常运行:
bash
docker --version
sudo systemctl status docker
如果状态显示 active (running),说明 Docker 安装成功!
⚡ 第二阶段:配置国内镜像加速器(必做)
由于网络原因,直接从 Docker Hub 拉取镜像经常会超时失败。配置镜像加速器是必须步骤。
bash
1. 创建 Docker 配置目录
sudo mkdir -p /etc/docker
2. 配置镜像加速器(推荐配置多个源以提高稳定性)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
]
}
EOF
3. 重启 Docker 服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 验证配置是否生效
docker info | grep -A 10 "Registry Mirrors"
执行最后一行命令后,如果能看到你配置的镜像地址,说明加速器配置成功。
🐬 第三阶段:部署 MySQL 8.0 容器
1. 创建数据持久化目录
为了防止容器删除后数据丢失,我们需要将 MySQL 的数据挂载到宿主机目录。
bash
mkdir -p ~/mysql-data
2. 启动 MySQL 容器
使用以下命令启动 MySQL。请务必将 YourStrongPassword123! 修改为你自己的强密码! (建议包含大小写字母、数字和特殊符号,长度超过 12 位)。
bash
docker run -d \
--name mysql8 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=YourStrongPassword123! \
-p 3306:3306 \
-v ~/mysql-data:/var/lib/mysql \
--log-opt max-size=100m \
mysql:8.0
参数解释:
-d: 后台运行--restart=always: 容器挂掉或服务器重启后自动重启-p 3306:3306: 将容器的 3306 端口映射到宿主机的 3306 端口-v: 数据卷挂载,实现数据持久化
3. 检查容器状态
bash
查看容器是否在运行
docker ps
查看 MySQL 启动日志(排查报错用)
docker logs mysql8
如果 docker ps 中 STATUS 为 Up,则表示启动成功。
🔧 第四阶段:配置用户与远程连接权限
1. 修复 Root 密码(如有必要)
如果你在日志中发现提示 root@localhost is created with an empty password,说明环境变量未生效。请执行以下命令修复:
bash
1. 进入 MySQL 容器
docker exec -it mysql8 mysql -u root -p
提示输入密码时,若环境变量失效则直接回车(空密码)
进入 MySQL 命令行后,执行 SQL 修改密码:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword123!';
FLUSH PRIVILEGES;
EXIT;
2. 允许 Root 远程登录
默认情况下,Root 用户只允许在容器内部(localhost)登录。为了能在本地工具(如 DBeaver、Navicat)连接,我们需要授权远程访问:
bash
重新进入容器(使用刚才设置的正确密码)
docker exec -it mysql8 mysql -u root -p
在 MySQL 命令行中执行:
sql
-- 允许 root 从任意 IP 远程登录
CREATE USER 'root'@'%' IDENTIFIED BY 'YourNewStrongPassword123!';
-- 授予所有权限
GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
(注意:生产环境建议创建专用数据库用户,而非直接使用 root 开放全网权限)
🔥 第五阶段:阿里云安全组配置(关键一步)
很多朋友配置完 Docker 后依然连不上数据库,90% 是因为阿里云的安全组没有放行端口。
-
登录 阿里云控制台。
-
找到你的 ECS 实例,点击进入。
-
点击左侧菜单的 安全组。
-
点击 配置规则 -> 入方向 -> 手动添加。
-
填写规则:
- 端口范围:
3306/3306 - 授权对象:
0.0.0.0/0(测试环境可以选这个,表示允许所有 IP 访问;生产环境建议填你的本地公网 IP) - 描述:MySQL Access
- 端口范围:
🧠 第六阶段:本地连接测试
回到你的 本地 Mac 电脑,打开终端进行连接测试。
1. 安装 MySQL 客户端
如果你本地没有安装 MySQL 客户端,可以使用 Homebrew 快速安装(只需客户端,不需安装完整服务端):
bash
brew install mysql
mysql --version
2. 终端连接测试
执行以下命令(将 你的服务器公网IP 和密码替换为你实际的):
bash
mysql -h你的服务器公网IP -P 3306 -u root -p
输入密码后,如果看到了 mysql> 提示符,恭喜你,远程连接成功!
此时你也可以打开 DBeaver 或 Navicat,使用上述信息进行可视化连接。
⚠️ 常见问题排查
-
Communications link failure- 检查阿里云安全组是否开启了 3306。
- 检查服务器防火墙:
sudo systemctl status firewalld,若开启需放行 3306 端口。
-
Docker 拉取镜像超时
- 确认是否完成了第二阶段的镜像加速器配置。
-
容器启动失败
- 运行
docker logs mysql8查看日志,常见原因是端口被占用(修改-p参数)或权限不足。
- 运行
结语: 通过以上步骤,你应该已经在阿里云服务器上成功搭建了一个基于 Docker 的 MySQL 8.0 环境,并能从本地进行远程管理。如果在操作中遇到其他问题,欢迎在评论区留言讨论!