在 docker 中配置 MySQL 容器

104 阅读3分钟

前言

最近给电脑重装了一下系统并重新分区了,所以需要重新开荒搭建开发环境。在之前的系统中,MySQL 是直接安装在宿主机上的,虽然用起来没什么问题,但每次系统更替都要经历一遍繁琐的安装和配置过程。这次,我决定尝试一种不同的方式——使用 Docker 来运行 MySQL。

选择 Docker 的初衷很简单:希望获得一个更加干净、隔离且易于迁移的数据库环境。在顺利安装好 Docker Desktop 并完成基础配置后,我开始着手部署 MySQL 服务。我特意选用了 mysql:8.0.39 这个特定版本,以确保与现有项目的兼容性。下面就是我这次从"本机安装"转向"容器化部署"的完整实践记录,希望能为考虑类似转型的开发者提供一份参考。

具体操作

拉取指定版本的 MySQL 镜像

首先,我们需要从 Docker Hub 获取正确的镜像。使用指定版本号是一个好习惯,可以避免因自动更新到最新版而带来的意外问题。

打开终端,执行以下命令:

docker pull mysql:8.0.39

命令完成后,可以使用 docker images 命令确认镜像已经成功下载到本地。也可以在 Docker Desktop 的 "Images" 标签页中查看已下载的镜像。

创建并运行 MySQL 容器

接下来是核心步骤,我们将通过一条 docker run 命令来创建并启动容器。这条命令整合了多个配置参数,下面我会逐一说明。

docker run -d `
  --name mysql `
  --restart unless-stopped `
  -p 3306:3306 `
  -v mysql_data:/var/lib/mysql `
  -e MYSQL_ROOT_PASSWORD=your_secure_password_here `
  -e MYSQL_DATABASE=my_app_db `
  mysql:8.0.39

参数解析:

  • -d:以后台守护进程模式运行容器。
  • --name mysql:为容器指定一个易于识别的名称。
  • --restart always:开机自动重启
  • -p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口,这样我们就能通过本机地址(如 127.0.0.1:3306)访问 MySQL 服务。
  • -v mysql_data:/var/lib/mysql:这是实现数据持久化的关键。
    • 它将一个名为 mysql_data 的 Docker 卷挂载到容器内的 MySQL 数据目录。这意味着即使容器被删除,数据库中的数据依然安全地保存在这个卷里。
    • 补充说明:如果省略 -v 参数,Docker 会为容器自动创建一个匿名数据卷来实现数据持久化。虽然数据不会随容器删除而丢失,但匿名卷的名称是一长串随机哈希值,不便于识别和管理。因此,显式地使用命名卷(如 mysql_data)是更推荐的做法。
  • -e MYSQL_ROOT_PASSWORD=...:设置 MySQL root 用户的密码,请务必替换为一个强密码。

验证容器状态

容器运行后,我们可以通过多种方式确认其状态:

命令行方式:

# 查看正在运行的容器
docker ps

# 或者查看所有容器,包括停止的
docker ps -a

图形界面方式: 打开 Docker Desktop,在 "Containers" 标签页中查看容器状态。如果看到名为 mysql 的容器状态为 "Running",就说明它已经在后台稳定运行了。

连接到 MySQL 数据库

现在,我们可以像连接任何本地 MySQL 服务一样进行连接了。

使用命令行连接: 可以直接进入容器内部的 MySQL 命令行客户端:

docker exec -it mysql mysql -u root -p

然后输入之前设置的 root 密码即可。

使用图形化工具连接: 在任何数据库管理工具中,使用以下配置:

  • Host: 127.0.0.1localhost
  • Port: 3306
  • Username: root
  • Password: 你设置的密码