Docker 安装 MySQL(长文讲解)

为什么选择 Docker 安装 MySQL

在开发过程中,我们常常需要数据库环境来测试代码、搭建项目或做数据验证。传统的安装方式,比如在本地系统直接安装 MySQL 服务,虽然可行,但会带来不少问题:配置复杂、容易污染系统环境、不同项目间数据库版本冲突、迁移困难。

这时候,Docker 就成了一个非常理想的解决方案。它像一个“轻量级虚拟机”,可以在你的电脑上快速运行一个独立的 MySQL 容器,完全隔离,互不影响。

想象一下,你有一辆自行车,但它自带一个小型电池供电的灯。这个灯不会影响你骑车,也不需要你额外安装电池或接线。Docker 安装 MySQL 就是这样一种“即插即用”的体验——你不需要关心底层系统,只要运行一条命令,MySQL 就能跑起来。

特别是对于初学者来说,Docker 安装 MySQL 降低了学习成本。你不再需要研究 MySQL 的配置文件、权限管理、服务启动脚本,只需要理解容器的基本概念和几个核心命令即可。

安装 Docker 环境准备

在开始 Docker 安装 MySQL 之前,确保你的开发环境已经安装了 Docker。目前主流的操作系统都支持 Docker,包括 Windows、macOS 和 Linux。

下载并安装 Docker Desktop

如果你使用的是 Windows 或 macOS,推荐使用 Docker Desktop。它提供了图形化界面,安装简单,适合初学者。

访问官网:https://www.docker.com/products/docker-desktop
下载对应系统的安装包,运行安装程序,按提示完成安装。

安装完成后,打开 Docker Desktop,你会看到一个绿色的图标表示服务正在运行。这是 Docker 的“引擎”已经启动,可以开始创建容器了。

提示:初次启动可能需要几分钟,因为它会下载必要的基础镜像。请耐心等待。

验证 Docker 是否安装成功

打开终端(Windows 用 PowerShell 或 CMD,macOS/Linux 用 Terminal),输入以下命令:

docker --version

如果看到类似输出:

Docker version 24.0.7, build 1123456789

说明 Docker 已正确安装。

再运行一个测试命令,验证容器是否能正常运行:

docker run hello-world

这个命令会下载一个极小的测试镜像,并运行它。如果看到输出:

Hello from Docker!
This message shows that your installation appears to be working correctly.

恭喜!你的 Docker 环境已经准备就绪,可以进行下一步操作了。

拉取并运行 MySQL 容器

现在我们正式开始 Docker 安装 MySQL 的核心步骤。

选择 MySQL 镜像版本

Docker Hub 上有官方维护的 MySQL 镜像,支持多个版本。我们推荐使用 MySQL 8.0,因为它是最新的稳定版本,兼容性好,功能完善。

运行 MySQL 容器

执行以下命令,即可启动一个 MySQL 8.0 容器:

docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  mysql:8.0

我们来逐行解释每个参数的含义:

  • docker run:启动一个新的容器。
  • -d:后台运行容器(detached 模式),容器启动后不会阻塞终端。
  • --name mysql-container:给容器起一个名字,方便后续管理。命名建议使用有意义的名称,比如 mysql-devmysql-test
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 的 root 用户密码。这是关键一步,必须设置,否则无法登录数据库。请务必记住这个密码。
  • -p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口。MySQL 默认使用 3306 端口,这样你就可以从本地访问数据库了。
  • mysql:8.0:指定要使用的镜像和版本。

安全提醒:生产环境中请不要使用 123456 这类简单密码。建议使用强密码,比如 MyPass@2025!

执行后,Docker 会自动从网络下载 MySQL 8.0 的镜像(大约 500MB),然后启动容器。第一次运行可能需要几十秒,之后再运行会快很多。

查看容器运行状态

运行以下命令,检查容器是否正常运行:

docker ps

你会看到类似输出:

CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                    NAMES
abc123def456   mysql:8.0   "docker-entrypoint.s…"   2 minutes ago     Up 2 minutes   0.0.0.0:3306->3306/tcp   mysql-container

如果 STATUS 显示为 Up,说明 MySQL 容器正在正常运行。

连接 MySQL 数据库

容器启动后,我们就可以连接它了。有多种方式可以连接,这里介绍两种最常用的方法。

使用命令行连接(推荐初学者)

打开终端,输入以下命令连接 MySQL:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h 127.0.0.1:指定数据库主机地址,本地就是 127.0.0.1。
  • -P 3306:指定端口,与容器映射一致。
  • -u root:使用 root 用户登录。
  • -p:提示输入密码。

输入密码 123456 后,如果看到:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12345
Server version: 8.0.35 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

说明连接成功!你可以开始执行 SQL 语句了。

创建测试数据库和表

为了验证数据库是否可用,我们创建一个测试数据库和表:

-- 创建一个名为 test_db 的数据库
CREATE DATABASE test_db;

-- 使用 test_db 数据库
USE test_db;

-- 创建一个名为 users 的表,包含 id、name 和 email 字段
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

-- 插入一条测试数据
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');

-- 查询数据
SELECT * FROM users;

如果看到输出:

+----+------+------------------+
| id | name | email            |
+----+------+------------------+
|  1 | 张三 | zhangsan@example.com |
+----+------+------------------+

恭喜!你的 Docker 安装 MySQL 已经成功运行,并且可以正常操作数据了。

配置持久化数据存储(重要!)

当前的容器运行时,MySQL 的数据是存储在容器内部的。一旦容器被删除,所有数据都会丢失。这对开发测试还行,但生产环境必须解决这个问题。

使用数据卷(Volume)实现持久化

我们通过创建一个 Docker 数据卷,将 MySQL 的数据目录挂载到宿主机,这样即使容器删除,数据也不会丢失。

修改之前的运行命令:

docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

关键新增部分:

  • -v mysql-data:/var/lib/mysql:创建一个名为 mysql-data 的数据卷,并将其挂载到容器内的 /var/lib/mysql 目录。这是 MySQL 存储数据的默认路径。

小知识mysql-data 是自定义的卷名,Docker 会自动管理这个卷的存储路径。你不需要知道它在宿主机的哪个位置。

再次运行该命令,Docker 会自动创建卷并挂载。即使你删除容器,数据依然保留在卷中。

恢复数据(容器删除后)

如果你不小心删除了容器,但数据卷还在,可以通过以下命令恢复:

docker run -d \
  --name mysql-recovery \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

这个新容器会自动读取之前保存的数据,实现“无缝恢复”。

常见问题与解决方案

在 Docker 安装 MySQL 的过程中,可能会遇到一些常见问题。以下是一些典型情况和应对方法。

问题 原因 解决方案
无法连接 MySQL 端口被占用或防火墙拦截 检查 3306 端口是否被其他程序占用,使用 `netstat -an
连接超时或拒绝连接 容器未启动或配置错误 执行 docker ps 确认容器状态,检查 -e MYSQL_ROOT_PASSWORD 是否正确设置
数据丢失 未使用数据卷挂载 建议所有生产或重要测试环境都使用 -v 挂载数据目录
密码错误 输入错误或未正确设置 重新运行容器时修改 MYSQL_ROOT_PASSWORD,并确保记住新密码

提示:如果需要修改密码,可以删除旧容器,重新创建一个并设置新密码。

总结与下一步建议

通过本文,你已经掌握了 Docker 安装 MySQL 的全流程:从环境准备、容器运行、连接测试,到数据持久化配置,每一步都清晰明了。

Docker 安装 MySQL 的优势在于:快速、隔离、可复用、易维护。无论你是初学者想快速搭建测试环境,还是中级开发者在项目中需要快速部署数据库,它都是一个值得掌握的技能。

下一步建议:

  • 尝试将 MySQL 容器与你的 Node.js、Python 或 Java 项目集成,实现前后端联调。
  • 学习 Docker Compose,用 docker-compose.yml 文件管理多个服务(如 MySQL + Nginx + App)。
  • 了解如何备份和恢复数据卷,为生产环境做准备。

记住,技术不是一蹴而就的。每一次动手实践,都是对知识的巩固。现在,你已经迈出了关键一步——用 Docker 安装 MySQL,是通往高效开发的第一步。