文章目录一、最快方式二、连接数据库三、推荐方式四、自动初始化 SQL实用五、常见坑1. 端口冲突2. Apple Silicon (M1/M2)六、MySQL Adminer 管理界面七、完整的标准环境方案1. 目录结构2. docker-compose.yml3. 初始化 SQL自动执行4. 启动环境5. 访问数据库6. 浏览器管理数据库7. 停止环境8. 完整开发流程推荐9. 常见增强团队常用10. 一个更高级的版本在本地用 Docker 快速构建一个测试用的 MySQL 数据库最简单的方法有两种docker run最快docker-compose推荐长期用一、最快方式一条命令启动 MySQL适合临时测试dockerrun-d\--namemysql-test\-eMYSQL_ROOT_PASSWORD123456\-eMYSQL_DATABASEtestdb\-p3306:3306\mysql:8参数解释参数作用--name mysql-test容器名字MYSQL_ROOT_PASSWORDroot 密码MYSQL_DATABASE自动创建数据库-p 3306:3306本机端口映射mysql:8MySQL 8 镜像启动后查看dockerps二、连接数据库本地连接host: localhost port: 3306 user: root password: 123456 database: testdb你可以用DBeaverTablePlusMySQL WorkbenchCLICLI 进入容器dockerexec-itmysql-test mysql-uroot-p输入密码123456三、推荐方式docker-compose开发最舒服创建文件docker-compose.yml内容version:3services:mysql:image:mysql:8container_name:mysql-testrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:123456MYSQL_DATABASE:testdbMYSQL_USER:testMYSQL_PASSWORD:test123ports:-3306:3306volumes:-./mysql-data:/var/lib/mysql启动dockercompose up-d好处数据持久化可以随时 stop/start方便扩展 redis 等服务四、自动初始化 SQL实用可以放一个初始化 SQLinit.sql例如CREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50),emailVARCHAR(100));INSERTINTOusers(name,email)VALUES(Alice,alicetest.com),(Bob,bobtest.com);修改 composevolumes:-./mysql-data:/var/lib/mysql-./init.sql:/docker-entrypoint-initdb.d/init.sql启动时自动执行。五、常见坑1. 端口冲突如果本机已有 MySQL3306:3306改成3307:33062. Apple Silicon (M1/M2)建议image:mysql:8.0platform:linux/amd64六、MySQL Adminer 管理界面很多前端不知道但很好用如果我们只是做API / SQL 测试可以直接跑一个MySQL Adminer 管理界面services:mysql:image:mysql:8environment:MYSQL_ROOT_PASSWORD:rootports:-3306:3306adminer:image:adminerports:-8080:8080打开http://localhost:8080就能像 phpMyAdmin 一样操作数据库。七、完整的标准环境方案一套专门给前端开发的 Docker 数据库环境里面包括MySQLRedisAdminer数据自动初始化一条命令启动数据持久化随时 stop / start基本是很多团队本地开发的标准环境。1. 目录结构先建一个开发目录dev-env/ ├─ docker-compose.yml ├─ mysql │ └─ init.sql2. docker-compose.ymlversion:3.9services:mysql:image:mysql:8.0container_name:dev-mysqlrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:rootMYSQL_DATABASE:devdbMYSQL_USER:devMYSQL_PASSWORD:dev123ports:-3306:3306volumes:-mysql-data:/var/lib/mysql-./mysql/init.sql:/docker-entrypoint-initdb.d/init.sqlredis:image:redis:7container_name:dev-redisrestart:alwaysports:-6379:6379volumes:-redis-data:/dataadminer:image:adminercontainer_name:dev-adminerrestart:alwaysports:-8080:8080volumes:mysql-data:redis-data:3. 初始化 SQL自动执行mysql/init.sqlCREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50),emailVARCHAR(100));INSERTINTOusers(name,email)VALUES(Alice,alicetest.com),(Bob,bobtest.com);MySQL第一次启动会自动执行。4. 启动环境进入目录cd dev-env启动dockercompose up-d启动完成会看到dev-mysql dev-redis dev-adminer5. 访问数据库MySQLhost: localhost port: 3306 user: dev password: dev123 database: devdbRedislocalhost:63796. 浏览器管理数据库打开http://localhost:8080登录 AdminerSystem: MySQL Server: mysql Username: root Password: root Database: devdb注意Server mysql因为容器网络里用服务名。7. 停止环境dockercompose down数据不会丢因为有 volume。8. 完整开发流程推荐启动环境docker compose up -d开发React / Node / Go连接localhost:3306 localhost:6379关闭docker compose down9. 常见增强团队常用可以再加服务用途Elasticsearch搜索Kafka消息队列MinIOS3 文件存储Mailhog测试邮件10. 一个更高级的版本再加一个数据库管理 UIphpMyAdmin或 Adminer但 Adminer 已经足够轻量。最后一个非常实用的小技巧前端团队常用把这个环境做成make dev例如dev: docker compose up -d团队成员只要make dev数据库就起来了。make dev是使用 GNU Make 的一种任务执行机制。本质上它是通过 Makefile 定义脚本任务然后用make 任务名执行。它在很多工程里相当于 任务运行器task runner类似npm run devpnpm devjust devtask dev但 make 更通用很多后端 / DevOps / 基础设施项目都会用。
HOW - 本地基于 docker 快速构建 mysql 数据库
文章目录一、最快方式二、连接数据库三、推荐方式四、自动初始化 SQL实用五、常见坑1. 端口冲突2. Apple Silicon (M1/M2)六、MySQL Adminer 管理界面七、完整的标准环境方案1. 目录结构2. docker-compose.yml3. 初始化 SQL自动执行4. 启动环境5. 访问数据库6. 浏览器管理数据库7. 停止环境8. 完整开发流程推荐9. 常见增强团队常用10. 一个更高级的版本在本地用 Docker 快速构建一个测试用的 MySQL 数据库最简单的方法有两种docker run最快docker-compose推荐长期用一、最快方式一条命令启动 MySQL适合临时测试dockerrun-d\--namemysql-test\-eMYSQL_ROOT_PASSWORD123456\-eMYSQL_DATABASEtestdb\-p3306:3306\mysql:8参数解释参数作用--name mysql-test容器名字MYSQL_ROOT_PASSWORDroot 密码MYSQL_DATABASE自动创建数据库-p 3306:3306本机端口映射mysql:8MySQL 8 镜像启动后查看dockerps二、连接数据库本地连接host: localhost port: 3306 user: root password: 123456 database: testdb你可以用DBeaverTablePlusMySQL WorkbenchCLICLI 进入容器dockerexec-itmysql-test mysql-uroot-p输入密码123456三、推荐方式docker-compose开发最舒服创建文件docker-compose.yml内容version:3services:mysql:image:mysql:8container_name:mysql-testrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:123456MYSQL_DATABASE:testdbMYSQL_USER:testMYSQL_PASSWORD:test123ports:-3306:3306volumes:-./mysql-data:/var/lib/mysql启动dockercompose up-d好处数据持久化可以随时 stop/start方便扩展 redis 等服务四、自动初始化 SQL实用可以放一个初始化 SQLinit.sql例如CREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50),emailVARCHAR(100));INSERTINTOusers(name,email)VALUES(Alice,alicetest.com),(Bob,bobtest.com);修改 composevolumes:-./mysql-data:/var/lib/mysql-./init.sql:/docker-entrypoint-initdb.d/init.sql启动时自动执行。五、常见坑1. 端口冲突如果本机已有 MySQL3306:3306改成3307:33062. Apple Silicon (M1/M2)建议image:mysql:8.0platform:linux/amd64六、MySQL Adminer 管理界面很多前端不知道但很好用如果我们只是做API / SQL 测试可以直接跑一个MySQL Adminer 管理界面services:mysql:image:mysql:8environment:MYSQL_ROOT_PASSWORD:rootports:-3306:3306adminer:image:adminerports:-8080:8080打开http://localhost:8080就能像 phpMyAdmin 一样操作数据库。七、完整的标准环境方案一套专门给前端开发的 Docker 数据库环境里面包括MySQLRedisAdminer数据自动初始化一条命令启动数据持久化随时 stop / start基本是很多团队本地开发的标准环境。1. 目录结构先建一个开发目录dev-env/ ├─ docker-compose.yml ├─ mysql │ └─ init.sql2. docker-compose.ymlversion:3.9services:mysql:image:mysql:8.0container_name:dev-mysqlrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:rootMYSQL_DATABASE:devdbMYSQL_USER:devMYSQL_PASSWORD:dev123ports:-3306:3306volumes:-mysql-data:/var/lib/mysql-./mysql/init.sql:/docker-entrypoint-initdb.d/init.sqlredis:image:redis:7container_name:dev-redisrestart:alwaysports:-6379:6379volumes:-redis-data:/dataadminer:image:adminercontainer_name:dev-adminerrestart:alwaysports:-8080:8080volumes:mysql-data:redis-data:3. 初始化 SQL自动执行mysql/init.sqlCREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50),emailVARCHAR(100));INSERTINTOusers(name,email)VALUES(Alice,alicetest.com),(Bob,bobtest.com);MySQL第一次启动会自动执行。4. 启动环境进入目录cd dev-env启动dockercompose up-d启动完成会看到dev-mysql dev-redis dev-adminer5. 访问数据库MySQLhost: localhost port: 3306 user: dev password: dev123 database: devdbRedislocalhost:63796. 浏览器管理数据库打开http://localhost:8080登录 AdminerSystem: MySQL Server: mysql Username: root Password: root Database: devdb注意Server mysql因为容器网络里用服务名。7. 停止环境dockercompose down数据不会丢因为有 volume。8. 完整开发流程推荐启动环境docker compose up -d开发React / Node / Go连接localhost:3306 localhost:6379关闭docker compose down9. 常见增强团队常用可以再加服务用途Elasticsearch搜索Kafka消息队列MinIOS3 文件存储Mailhog测试邮件10. 一个更高级的版本再加一个数据库管理 UIphpMyAdmin或 Adminer但 Adminer 已经足够轻量。最后一个非常实用的小技巧前端团队常用把这个环境做成make dev例如dev: docker compose up -d团队成员只要make dev数据库就起来了。make dev是使用 GNU Make 的一种任务执行机制。本质上它是通过 Makefile 定义脚本任务然后用make 任务名执行。它在很多工程里相当于 任务运行器task runner类似npm run devpnpm devjust devtask dev但 make 更通用很多后端 / DevOps / 基础设施项目都会用。