一、Docker Compose 配置优化
1.1 最终版配置
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: postgres # 标准容器命名
restart: unless-stopped
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD} # 通过.env文件注入
- POSTGRES_DB=test
- POSTGRES_HOST_AUTH_METHOD=md5
- TZ=Asia/Shanghai
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- postgres-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 10
volumes:
postgres_data:
networks:
postgres-net:
driver: bridge
1.2 关键配置说明
-
安全增强
- 使用
.env
文件管理敏感信息:echo "POSTGRES_PASSWORD=$(openssl rand -base64 16)" > .env
- 强制密码认证(
md5
)
- 使用
-
数据持久化
- 命名卷
postgres_data
保障数据安全 - 查看数据卷位置:
docker volume inspect pqsql_postgres_data
- 命名卷
-
健康检查
- 自动检测数据库就绪状态
- 其他服务可通过
condition: service_healthy
依赖检测
二、常用 Docker 运维命令
2.1 容器生命周期
操作 | 命令 |
---|---|
启动服务 | docker compose up -d |
停止容器 | docker stop postgres |
删除容器 | docker rm -f postgres |
查看日志 | docker logs -f postgres |
2.2 数据管理
# 全库备份
docker exec -t postgres pg_dumpall -U postgres > backup_$(date +%F).sql
# 单库恢复
cat backup.sql | docker exec -i postgres psql -U postgres
2.3 监控调试
# 查看资源占用
docker stats postgres
# 进入容器Shell
docker exec -it postgres sh
三、PostgreSQL 核心操作指南
3.1 快速接入数据库
# 直接进入PSQL
docker exec -it postgres psql -U postgres -d test
3.2 常用元命令速查
命令 | 说明 |
---|---|
\l | 列出所有数据库 |
\c 数据库名字 | 进入数据库 |
\dt | 显示当前库所有表 |
\d+ 表名 | 查看表结构详情 |
\x | 切换宽表显示模式 |
\timing | 开启SQL执行计时 |
3.3 高频SQL操作
-- 创建只读用户
CREATE USER viewer WITH PASSWORD 'securePass123!';
GRANT CONNECT ON DATABASE test TO viewer;
GRANT USAGE ON SCHEMA public TO viewer;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO viewer;
-- 查询性能分析
EXPLAIN ANALYZE SELECT * FROM large_table WHERE create_date > '2023-01-01';
四、生产环境建议
4.1 安全加固
- 禁用默认超级用户:
ALTER USER postgres WITH NOLOGIN;
- 定期轮换密码:
ALTER USER app_user WITH PASSWORD 'newSecurePass!';
4.2 备份策略
# 每日压缩备份(保留30天)
docker exec -t postgres pg_dumpall -U postgres | gzip > pg_$(date +%Y%m%d).sql.gz
find . -name "pg_*.sql.gz" -mtime +30 -delete
4.3 资源限制
# 在docker-compose.yml中添加
deploy:
resources:
limits:
memory: 4G
cpus: '2.0'
五、故障排查工具箱
5.1 连接问题诊断
# 检查端口映射
docker port postgres
# 测试认证配置
docker exec -it postgres psql -U test_user -d test
5.2 日志分析技巧
# 筛选错误日志
docker logs postgres 2>&1 | grep -i -E 'error|fail'
# 实时监控慢查询
docker logs -f postgres | grep 'duration:'
结语
本文提供了一套开箱即用的 PostgreSQL 容器化部署方案,涵盖从基础配置到生产级优化的全流程。通过标准化容器命名(postgres
)和模块化设计,既保证了易用性,又为系统扩展预留了空间。建议根据实际业务需求:
- 调整自动备份策略
- 配置监控告警(推荐 Prometheus + Grafana)
- 定期进行恢复演练
评论