MySQL/PostgreSQL 容器部署
关系型数据库容器化部署需要关注密码、持久化和字符集配置。
MySQL 部署
快速部署
Bash
# 最简部署
docker run -d \
--name my-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
mysql:8.0
完整部署
Bash
# 生产环境
docker run -d \
--name mysql-prod \
-p 127.0.0.1:3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=app_user \
-e MYSQL_PASSWORD=app_pass \
--restart unless-stopped \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
环境变量说明
| 变量 | 说明 |
|---|---|
MYSQL_ROOT_PASSWORD | root 密码(必填) |
MYSQL_DATABASE | 初始化数据库 |
MYSQL_USER | 初始化普通用户 |
MYSQL_PASSWORD | 普通用户密码 |
MYSQL_ALLOW_EMPTY_PASSWORD | 允许空密码(yes/no) |
MYSQL_RANDOM_ROOT_PASSWORD | 随机 root 密码(yes/no) |
PostgreSQL 部署
快速部署
Bash
# 最简部署
docker run -d \
--name my-postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=postgres123 \
postgres:15
完整部署
Bash
# 生产环境
docker run -d \
--name postgres-prod \
-p 127.0.0.1:5432:5432 \
-v /data/postgres:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=postgres123 \
-e POSTGRES_DB=myapp \
-e POSTGRES_USER=app_user \
--restart unless-stopped \
postgres:15
环境变量说明
| 变量 | 说明 |
|---|---|
POSTGRES_PASSWORD | postgres 用户密码(必填) |
POSTGRES_DB | 初始化数据库 |
POSTGRES_USER | 初始化用户(默认 postgres) |
POSTGRES_INITDB_ARGS | 初始化参数(如字符集) |
连接测试
MySQL
Bash
# 使用 CLI 连接
docker exec -it my-mysql mysql -uroot -proot123
# 执行 SQL
mysql> SHOW DATABASES;
mysql> CREATE DATABASE test_db;
PostgreSQL
Bash
# 使用 CLI 连接
docker exec -it my-postgres psql -U postgres
# 执行 SQL
postgres=# \l
postgres=# CREATE DATABASE test_db;
配置文件挂载
MySQL
Bash
# 挂载自定义配置
docker run -d \
--name mysql-prod \
-v /data/mysql/conf.d:/etc/mysql/conf.d:ro \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root123 \
mysql:8.0
/data/mysql/conf.d/my.cnf:
ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200
PostgreSQL
Bash
# 挂载配置文件
docker run -d \
--name postgres-prod \
-v /data/postgres/conf:/etc/postgresql:ro \
postgres:15 \
postgres -c config_file=/etc/postgresql/postgresql.conf
备份与恢复
MySQL 备份
Bash
# 备份
docker exec my-mysql mysqldump -uroot -proot123 --all-databases > backup.sql
# 恢复
docker exec -i my-mysql mysql -uroot -proot123 < backup.sql
PostgreSQL 备份
Bash
# 备份
docker exec my-postgres pg_dumpall -U postgres > backup.sql
# 恢复
docker exec -i my-postgres psql -U postgres < backup.sql
要点总结
- 必须设置数据库密码环境变量(MYSQL_ROOT_PASSWORD / POSTGRES_PASSWORD)
- 数据目录挂载到容器实现持久化(MySQL:
/var/lib/mysql, PG:/var/lib/postgresql/data) - 绑定
127.0.0.1防止外部访问 - 配置字符集 utf8mb4 支持完整 Unicode
- 定期使用 mysqldump / pg_dump 备份数据
📝 发现内容有误?点击此处直接编辑