讲解

在本机直接安装 MySQL 会遇到一堆麻烦:不同操作系统的安装包不一样、版本升级降级痛苦、卸载残留清不干净。Docker 把数据库打包成一个镜像,一条命令就能拉起一个版本确定、环境隔离的 MySQL,玩坏了删掉容器重来就是,是学习和小型部署的最佳选择。本教程的验证环境就是一个 mysql:8.0 镜像的容器。

核心命令是 docker run,它的每个参数都值得理解:-d 后台运行;--name 给容器起名字,方便后续操作;-p 3306:3306 把容器里的 3306 端口映射到宿主机,左边的 3306 是宿主机端口,本机已有 MySQL 占用时可以改成 3307;-e MYSQL_ROOT_PASSWORD 设置 root 密码,这是必填的初始化参数;-v 把数据目录挂载到数据卷,保证容器删除后数据还在;最后的 mysql:8.0 是镜像名和标签。

容器启动后,MySQL 需要十几秒完成初始化(创建系统库、设置 root 密码),用 docker logs 可以观察启动过程,看到 ready for connections 就说明可以连接了。生产部署时还有更多讲究——挂载自定义配置文件、限制内存、设置重启策略——但学习阶段一条 docker run 足够了。

示例

在宿主机上启动一个 MySQL 8.0 容器(本教程的验证容器已在运行,此命令仅作演示):

# 仅示意:宿主机命令,验证环境的容器已由管理员启动,请勿重复执行
docker run -d \
  --name mysql80 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD='换成强密码' \
  -v mysql80_data:/var/lib/mysql \
  mysql:8.0

启动后查看日志、连入容器里的 MySQL:

# 仅示意:宿主机命令(docker logs / docker exec 在容器外执行)
docker logs mysql80

docker exec -it mysql80 mysql -uroot -p

连上之后第一件事:验证服务器版本和登录身份,确认真的是 8.0 而且用的是 root:

SELECT VERSION() AS version, CURRENT_USER() AS login_user;

常见坑

  • 端口冲突:宿主机已装过 MySQL 时 3306 被占用,docker run 会报端口绑定失败,把映射改成 -p 3307:3306 即可。
  • 不挂数据卷:不加 -v 时数据存在容器层里,容器一删数据全没。学习时无所谓,重要数据务必挂载数据卷。
  • root 密码太随意:练习环境里很多人用 123456,如果这个容器暴露了端口,等于把数据库拱手让人。哪怕是练习,也养成用强密码的习惯。
  • 镜像用 latest 标签:latest 会随时间指向不同大版本,重建容器时悄悄升级可能带来兼容问题。学习、测试、生产都应锁定具体标签(如 mysql:8.0)。

小结

docker run 一条命令即可获得版本确定的 MySQL 8.0:-d 后台、--name 命名、-p 映射端口、-e 设密码、-v 挂数据卷。下一章认识每天打交道最多的工具——mysql 命令行客户端。