全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

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_PASSWORDroot 密码(必填)
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_PASSWORDpostgres 用户密码(必填)
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 备份数据

📝 发现内容有误?点击此处直接编辑

← 上一篇 构建自定义镜像
下一篇 → Nginx 容器部署
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库