讲解
在本机直接安装 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 命令行客户端。