前言
最近给电脑重装了一下系统并重新分区了,所以需要重新开荒搭建开发环境。在之前的系统中,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.1或localhost - Port:
3306 - Username:
root - Password: 你设置的密码