在 Docker Compose 中部署 MySQL 很简单,核心是写好
docker-compose.yml文件,正确挂载数据卷、设置 root 密码、暴露端口,并确保容器启动后 MySQL 服务可用。
基础 MySQL Compose 配置
以下是最小可用的
docker-compose.yml示例:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: my-mysql
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
restart: unless-stopped
关键配置说明与建议
密码必须通过MYSQL_ROOT_PASSWORD设置,否则容器会启动失败或进入初始化等待状态 数据目录务必挂载到宿主机(如
./mysql-data),避免容器重启后数据库丢失 首次启动会自动初始化数据库,耗时几秒到十几秒,可通过
docker logs -f my-mysql查看初始化进度 如需自定义字符集或时区,可添加环境变量:
MYSQL_INITDB_SKIP_TZINFO: 1或挂载
my.cnf配置文件
进阶:挂载配置文件 + 初始化 SQL
若需修改默认配置(如支持 emoji、调整最大连接数)或自动建库建表,可扩展如下:
在项目目录新建conf/my.cnf,内容示例:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200 新建
init/init.sql,写入建库语句:
CREATE DATABASE IF NOT EXISTS app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 在
docker-compose.yml中补充挂载:
volumes:
- ./mysql-data:/var/lib/mysql
- ./conf/my.cnf:/etc/mysql/conf.d/custom.cnf
- ./init:/docker-entrypoint-initdb.d
常用操作命令
启动服务:docker-compose up -d查看日志:
docker-compose logs -f mysql进入 MySQL 容器执行命令:
docker-compose exec mysql mysql -uroot -pmy-secret-pw停止并清理:
docker-compose down -v(
-v会同时删除挂载的数据卷,慎用)
