文章目录
- 一、最快方式
- 二、连接数据库
- 三、推荐方式
- [四、自动初始化 SQL(实用)](#四、自动初始化 SQL(实用))
- 五、常见坑
-
- [1. 端口冲突](#1. 端口冲突)
- [2. Apple Silicon (M1/M2)](#2. Apple Silicon (M1/M2))
- [六、MySQL + Adminer 管理界面](#六、MySQL + Adminer 管理界面)
- 七、完整的标准环境方案
-
- [1. 目录结构](#1. 目录结构)
- [2. docker-compose.yml](#2. docker-compose.yml)
- [3. 初始化 SQL(自动执行)](#3. 初始化 SQL(自动执行))
- [4. 启动环境](#4. 启动环境)
- [5. 访问数据库](#5. 访问数据库)
- [6. 浏览器管理数据库](#6. 浏览器管理数据库)
- [7. 停止环境](#7. 停止环境)
- [8. 完整开发流程(推荐)](#8. 完整开发流程(推荐))
- [9. 常见增强(团队常用)](#9. 常见增强(团队常用))
- [10. 一个更高级的版本](#10. 一个更高级的版本)
在本地用 Docker 快速构建一个 测试用的 MySQL 数据库,最简单的方法有两种:
- docker run(最快)
- docker-compose(推荐长期用)
一、最快方式
一条命令启动 MySQL(适合临时测试):
bash
docker run -d \
--name mysql-test \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=testdb \
-p 3306:3306 \
mysql:8
参数解释:
| 参数 | 作用 |
|---|---|
--name mysql-test |
容器名字 |
MYSQL_ROOT_PASSWORD |
root 密码 |
MYSQL_DATABASE |
自动创建数据库 |
-p 3306:3306 |
本机端口映射 |
mysql:8 |
MySQL 8 镜像 |
启动后查看:
bash
docker ps
二、连接数据库
本地连接:
host: localhost
port: 3306
user: root
password: 123456
database: testdb
你可以用:
- DBeaver
- TablePlus
- MySQL Workbench
- CLI
CLI 进入容器:
bash
docker exec -it mysql-test mysql -uroot -p
输入密码:
123456
三、推荐方式
docker-compose(开发最舒服)
创建文件:
docker-compose.yml
内容:
yaml
version: "3"
services:
mysql:
image: mysql:8
container_name: mysql-test
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testdb
MYSQL_USER: test
MYSQL_PASSWORD: test123
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
启动:
bash
docker compose up -d
好处:
- 数据持久化
- 可以随时 stop/start
- 方便扩展 redis 等服务
四、自动初始化 SQL(实用)
可以放一个初始化 SQL:
init.sql
例如:
sql
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO users (name,email)
VALUES
('Alice','alice@test.com'),
('Bob','bob@test.com');
修改 compose:
yaml
volumes:
- ./mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
启动时自动执行。
五、常见坑
1. 端口冲突
如果本机已有 MySQL:
3306:3306
改成:
3307:3306
2. Apple Silicon (M1/M2)
建议:
yaml
image: mysql:8.0
platform: linux/amd64
六、MySQL + Adminer 管理界面
很多前端不知道但很好用:如果我们只是做 API / SQL 测试 ,可以直接跑一个 MySQL + Adminer 管理界面:
yaml
services:
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
adminer:
image: adminer
ports:
- "8080:8080"
打开:
http://localhost:8080
就能像 phpMyAdmin 一样操作数据库。
七、完整的标准环境方案
一套 专门给前端开发的 Docker 数据库环境,里面包括:
- MySQL
- Redis
- Adminer
- 数据自动初始化
- 一条命令启动
- 数据持久化
- 随时 stop / start
基本是 很多团队本地开发的标准环境。
1. 目录结构
先建一个开发目录:
dev-env/
├─ docker-compose.yml
├─ mysql
│ └─ init.sql
2. docker-compose.yml
yaml
version: "3.9"
services:
mysql:
image: mysql:8.0
container_name: dev-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: devdb
MYSQL_USER: dev
MYSQL_PASSWORD: dev123
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
redis:
image: redis:7
container_name: dev-redis
restart: always
ports:
- "6379:6379"
volumes:
- redis-data:/data
adminer:
image: adminer
container_name: dev-adminer
restart: always
ports:
- "8080:8080"
volumes:
mysql-data:
redis-data:
3. 初始化 SQL(自动执行)
mysql/init.sql
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO users (name,email)
VALUES
('Alice','alice@test.com'),
('Bob','bob@test.com');
MySQL 第一次启动会自动执行。
4. 启动环境
进入目录:
cd dev-env
启动:
bash
docker compose up -d
启动完成会看到:
dev-mysql
dev-redis
dev-adminer
5. 访问数据库
MySQL:
host: localhost
port: 3306
user: dev
password: dev123
database: devdb
Redis:
localhost:6379
6. 浏览器管理数据库
打开:
http://localhost:8080
登录 Adminer:
System: MySQL
Server: mysql
Username: root
Password: root
Database: devdb
注意:
Server = mysql
因为容器网络里用服务名。
7. 停止环境
bash
docker compose down
数据不会丢,因为有 volume。
8. 完整开发流程(推荐)
启动环境:
docker compose up -d
开发:
React / Node / Go
连接:
localhost:3306
localhost:6379
关闭:
docker compose down
9. 常见增强(团队常用)
可以再加:
| 服务 | 用途 |
|---|---|
| Elasticsearch | 搜索 |
| Kafka | 消息队列 |
| MinIO | S3 文件存储 |
| Mailhog | 测试邮件 |
10. 一个更高级的版本
再加一个 数据库管理 UI:
- phpMyAdmin
- 或 Adminer
但 Adminer 已经足够轻量。
最后,一个非常实用的小技巧(前端团队常用)
把这个环境做成:
make dev
例如:
makefile
dev:
docker compose up -d
团队成员只要:
make dev
数据库就起来了。
make dev 是使用 GNU Make 的一种任务执行机制。
本质上它是:通过 Makefile 定义脚本任务,然后用 make <任务名> 执行。
它在很多工程里相当于 任务运行器(task runner),类似:
- npm run dev
- pnpm dev
- just dev
- task dev
但 make 更通用,很多后端 / DevOps / 基础设施项目都会用。