阿里云服务器 Docker 部署 MySQL 8.0 全攻略:从零到远程连接

3 阅读6分钟

前言

在阿里云服务器上部署 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": [

"docker.m.daocloud.io",

"docker.1ms.run",

"mirror.ccs.tencentyun.com"

]

}

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 psSTATUSUp,则表示启动成功。


🔧 第四阶段:配置用户与远程连接权限

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% 是因为阿里云的安全组没有放行端口

  1. 登录 阿里云控制台

  2. 找到你的 ECS 实例,点击进入。

  3. 点击左侧菜单的 安全组

  4. 点击 配置规则 -> 入方向 -> 手动添加

  5. 填写规则:

    • 端口范围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> 提示符,恭喜你,远程连接成功!

此时你也可以打开 DBeaverNavicat,使用上述信息进行可视化连接。


⚠️ 常见问题排查

  1. Communications link failure

    • 检查阿里云安全组是否开启了 3306。
    • 检查服务器防火墙:sudo systemctl status firewalld,若开启需放行 3306 端口。
  2. Docker 拉取镜像超时

    • 确认是否完成了第二阶段的镜像加速器配置。
  3. 容器启动失败

    • 运行 docker logs mysql8 查看日志,常见原因是端口被占用(修改 -p 参数)或权限不足。

结语: 通过以上步骤,你应该已经在阿里云服务器上成功搭建了一个基于 Docker 的 MySQL 8.0 环境,并能从本地进行远程管理。如果在操作中遇到其他问题,欢迎在评论区留言讨论!