Docker部署mysql:Docker部署MySQL详细教
Docker部署MySQL:零基础也能搞定的完整教程
很多新手在第一次接触 Docker部署mysql 时,会被参数和报错吓到。
其实只要把几个核心步骤理清楚,从拉取镜像到容器跑起来,全程不过 5 分钟。
本文会尽量用最直白的方式带你走一遍完整流程,同时把容易踩的坑都指出来。
准备工作:先确认你的环境
在开始之前,请确保你已经安装了 Docker。
如果你用的是服务器(比如 CentOS 或 Ubuntu),可以执行下面这条命令检查:
docker --version
如果提示 command not found,说明还没装 Docker。
安装方法很简单——大部分系统可以用官方的一键安装脚本:
curl -fsSL https://get.docker.com | sh
安装完成后,启动 Docker 服务:
sudo systemctl start docker
如果你是宝塔面板用户,可以直接在宝塔后台的“软件商店”里找到 Docker 管理器,一键安装并启动,连命令都不用敲。
确认 Docker 运行后,我们就可以正式开始 Docker部署mysql 了。
拉取 MySQL 镜像并启动容器
MySQL 的官方镜像名为 mysql,我们直接拉取最新的 8.0 版本(你也可以指定版本号,比如 mysql:8.0.34):
docker pull mysql:8.0
拉取完成后,运行下面的命令就能启动一个 MySQL 容器:
docker run -d \
--name mysql-8 \
-e MYSQL_ROOT_PASSWORD=MyStrongP@ss123 \
-p 3306:3306 \
mysql:8.0
参数说明:
-d:后台运行。--name:给容器取个名字,后面方便管理。-e MYSQL_ROOT_PASSWORD:设置 root 用户的密码,请换成你自己的强密码。-p 3306:3306:把宿主机的 3306 端口映射到容器内的 3306 端口,这样外部工具才能连上来。
执行完后,终端会返回一串容器 ID,说明容器已经启动了。
你可以用 docker ps 看看容器是否正常运行:
docker ps
如果看到 mysql-8 的状态是 Up,就说明启动成功了。
配置数据持久化与字符集
直接这样跑有个问题:容器一旦被删除,里面的数据库数据就全丢了。
所以生产环境一定要做数据持久化。
我们需要在宿主机上创建一个目录,挂载到容器里的 /var/lib/mysql:
mkdir -p /data/mysql/data
然后重新创建容器(先删掉之前那个):
docker stop mysql-8 && docker rm mysql-8
docker run -d \
--name mysql-8 \
-e MYSQL_ROOT_PASSWORD=MyStrongP@ss123 \
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
mysql:8.0
这里新增了两个 -v 参数:
- 第一个挂载数据目录,即使容器重建,数据还在。
- 第二个挂载配置目录,我们可以放自定义的配置文件,比如修改默认字符集。
要在挂载的配置目录下新建一个 my.cnf 文件:
sudo tee /data/mysql/conf/my.cnf <<-'EOF'
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
EOF
然后重启容器使配置生效:
docker restart mysql-8
常见问题与避坑说明
- 容器启动后马上退出:最常见的原因是密码不符合 MySQL 的安全策略。避免用太简单的密码(比如
123456),可以用大小写字母+数字+特殊符号的组合。 - 远程连接不上:默认 MySQL 只允许本地连接。你需要进入容器修改 root 的 host 为
%:
docker exec -it mysql-8 mysql -uroot -pMyStrongP@ss123
在 MySQL 提示符下执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MyStrongP@ss123';
FLUSH PRIVILEGES;
- 端口冲突:如果宿主机已经装了 MySQL 或其他程序占用 3306 端口,可以把映射端口改成其他值,比如
-p 3307:3306,客户端连接时用 3307。 - 数据卷权限问题:挂载的目录如果权限不对,容器会因无法写入而退出。可以用
chown -R 999:999 /data/mysql/data把目录所有权改成 MySQL 容器内使用的 uid(默认 999)。
验证 MySQL 是否正常运行
先在容器内测试:
docker exec -it mysql-8 mysql -uroot -p
输入密码后进入 MySQL 命令行,执行 SHOW DATABASES; 能看到默认数据库就算成功。
也可以用本地的可视化工具(如 Navicat、DBeaver)连接服务器的 IP(比如 123.45.67.89)+ 端口 3306,使用 root 和刚才设置的密码。
如果连接成功,说明 Docker部署mysql 已经完美落地。
至此,你已经掌握了用 Docker 快速部署 MySQL 的核心流程。
以后需要扩容或迁移数据库时,只要把数据目录 /data/mysql/data 打包带走,换个宿主机挂载上就能恢复数据,非常方便。
如果在操作中遇到报错,记得先检查端口、密码和数据卷这三个最容易出问题的地方。