HOW - 本地基于 docker 快速构建 mysql 数据库

文章目录

  • 一、最快方式
  • 二、连接数据库
  • 三、推荐方式
  • [四、自动初始化 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 / 基础设施项目都会用。

相关推荐
叁金Coder2 小时前
【Centos8 环境下 X86 版本 docker-29.1.3 的安装配置】
运维·docker·容器
SuniaWang2 小时前
Docker Compose 容器管理与自动化部署进阶指南
docker·容器·自动化
数据知道2 小时前
MongoDB读取偏好配置:如何优化查询路由策略?
数据库·mongodb
skiy2 小时前
【MySQL 的数据目录】
数据库·mysql·adb
爬山算法2 小时前
MongoDB(43)什么是嵌入式文档?
数据库·mongodb
_Jimmy_2 小时前
mysql 键长如何计算
数据库·mysql
J2虾虾2 小时前
通过Web界面来访问和操作MySQL数据库的开源项目
前端·数据库·mysql
雪碧聊技术2 小时前
Oracle数据迁移指南:如何按主键顺序提取并迁移前10,000条记录(基于CSV)
数据库·oracle·数据导出·数据导入·数据备份、迁移
kaixin_啊啊2 小时前
(1)如何使用Docker部署IT-Tools并结合内网穿透实现公网访问本地工具箱服务
docker·容器·eureka