
Docker 是一个容器化平台 ,它把应用和它的依赖(如 MySQL、Python、配置文件等)一起打包进一个**标准化的"集装箱"(容器)**里。这个"集装箱"可以在任何安装了 Docker 的服务器上直接运行,无需关心底层操作系统是什么。
可以把它理解为更轻量级的虚拟机:
-
虚拟机需要模拟整个操作系统,比较笨重(几个 GB)。
-
容器共享主机操作系统内核,非常轻快(通常几十到几百 MB),启动时间以秒计算。
用 Docker 安装 MySQL
对于"搭建一个能用的 MySQL 环境"这个任务,用 Docker 非常方便。 主要体现在这几个方面:
| 对比 | 传统安装 | Docker 安装 |
|---|---|---|
| 安装步骤 | 需要下载、安装、配置、启动服务,步骤较多 | 一条命令拉取镜像,一条命令启动容器 |
| 环境隔离 | 直接装在系统里,可能与其他软件冲突 | 运行在独立容器里,互不干扰 |
| 版本管理 | 换版本需要卸载重装 | 拉取不同版本的镜像,或改一下版本号重启 |
| 卸载 | 容易卸载不干净 | 删除容器和镜像即可,不留痕迹 |
| 学习成本 | 对新手有一定门槛 | 需要了解基本的 Docker 命令,但上手并不难 |
用 Docker 安装 MySQL 的步骤
第一步:拉取 MySQL 镜像(相当于下载安装包)
# 拉取最新版本的 MySQL 8.0
docker pull mysql:8.0
第二步:启动 MySQL 容器(相当于安装并启动服务)
docker run -d \
--name mysql_demo \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
mysql:8.0
参数说明:
| 参数 | 作用 |
|---|---|
-d |
后台运行(守护模式),不占用当前终端 |
--name mysql_demo |
给容器命名,方便后续管理 |
-e MYSQL_ROOT_PASSWORD=123456 |
通过环境变量设置 root 密码,这是创建容器时必须配置的 |
-p 3306:3306 |
端口映射:将容器内部的 3306 端口映射到宿主机的 3306 端口,这样你的电脑就能通过 localhost:3306 访问它 |
-v mysql_data:/var/lib/mysql |
数据持久化:将容器内的 MySQL 数据目录挂载到一个名叫 mysql_data 的卷上,即使容器被删除,数据依然保留 |
第三步:连接到 MySQL
# 方法1:进入容器内部
docker exec -it mysql_demo mysql -uroot -p
# 输入密码 123456
# 方法2:使用宿主机的客户端工具(如 Navicat、DBeaver)
# 连接地址:localhost,端口:3306,用户名:root,密码:123456
常用管理命令
# 停止容器
docker stop mysql_demo
# 启动容器
docker start mysql_demo
# 查看容器日志(排查错误)
docker logs mysql_demo
# 删除容器(注意:数据卷需要单独删除)
docker rm mysql_demo
# 删除数据卷(会丢失所有数据)
docker volume rm mysql_data
# 查看数据卷列表
docker volume ls
注意事项
-
密码配置 :
MYSQL_ROOT_PASSWORD是必需的,容器没有它就无法启动。 -
端口冲突 :如果宿主机 3306 端口已被占用,可以修改映射,比如
-p 3307:3306,之后连接时端口用 3307。 -
数据持久化 :建议用
-v挂载卷保存数据,否则容器一删,数据就没了。 -
多版本共存:可以同时运行 MySQL 5.7 和 8.0 两个容器,只要映射不同的宿主机端口就行。
| 情况 | 建议 |
|---|---|
| 平时习惯用包管理器(如 apt-get、Homebrew) | 传统安装更顺手,对新手也更直观 |
| 想在本地快速测试多个 MySQL 版本,或者快速搭一个环境用完就扔 | Docker 最合适 |
| 自己是初学者,想先弄懂 MySQL 本身的配置逻辑 | 传统安装能让你更清楚配置文件在哪,日志怎么查 |
| 自己常用的工具链已经依赖 Docker 了 | 直接选 Docker,减少学习负担 |
如果还不熟悉 Docker 命令,用传统安装可能更省心;如果打算长期用容器来管理开发环境,Docker 的方式长期来看会更方便。两种方式没有绝对好坏,选自己顺手、能快速跑起来的就好。