字数 1286,阅读大约需 7 分钟
🤔 用docker-compose管理postgres

Docker 提供了 docker-compose 工具,它使得开发者能够通过一个简单的 YAML 文件来定义和管理多个容器化应用。docker-compose 不仅可以简化单个服务的配置,还能轻松处理多个相互依赖的服务,如数据库、缓存服务器和应用程序服务器等.Docker技术在PostgreSQL数据库部署中的应用与探究[1]
在开发环境使用 Docker Compose 部署 PostgreSQL,让开发环境搭建从"几小时的折腾"变成"一分钟启动",保持不同开发环境的数据隔离和开发协作一致性。使用docker-compose 部署 PostgreSQL + 应用 的架构,核心优势在于简化环境一致性、降低部署复杂度、增强可扩展性。PostgreSQL: The world's most advanced open source database[2]
本文将演示如何在开发环境,容器化部署Postgres:

应用开发和postgres使用示意图
执行 docker-compose up -d 一键启动所有服务,docker-compose down 一键停止并清理,极大简化开发、测试环境的搭建流程。以下是后端应用和postgres连接的拓扑关系示意图:使用端口5432即可连接到postgres.
数据库配置 DB Config后端服务 Backend Services
主机环境 Host Machine
Docker 容器 Docker Container
数据持久化
端口映射
5432:5432
环境变量注入
TCP/IP 连接
postgres://service:service@localhost:5432/dbname
TCP/IP 连接
postgres://service:service@localhost:5432/dbname
TCP/IP 连接
postgres://service:service@localhost:5432/dbname
配置参考
配置参考
配置参考
PostgreSQL 12
服务名: db
主机名: pg.local
数据卷
/var/lib/postgresql/data
主机存储
./postgres/pgdata_all
主机端口
5432
应用服务 1
Backend App
应用服务 2
Backend App
应用服务 N
Backend App
连接配置
---
Host: localhost/pg.local
Port: 5432
User: service
Password: service
Max Connections: 10000
.env 文件
环境变量
部署postgres的yaml参数和配置说明
部署postgres配置的docker-compose.yaml
---
# This docker compose file is used for developer to setup
# dev enironment quickly. Only local machine with
# docker and docker-compose is required.
version: '3.3'
services:
db:
image: postgres:12
restart: always
volumes:
# notice: all the db data are located in /root/pgdata
- ./postgres/pgdata_all:/var/lib/postgresql/data
environment:
- POSTGRES_USER=service
- POSTGRES_PASSWORD=service
command: ["postgres", "-c", "max_connections=10000"]
env_file:
- .env
expose:
- 5432
ports:
- "5432:5432"
networks:
- platform-common-net
hostname: pg.local
networks:
platform-common-net:
external: true参数详细说明
关键参数配置:版本和启动命令
1. image指定镜像postgres:12✅
2. 必需restart重启策略always⭐
3. 推荐volumes数据持久化./data:/var/lib/postgresql/data⭐
4. 推荐environment环境变量POSTGRES_USER=service⭐
5. 推荐command自定义命令["postgres", "-c", "max_connections=10000"]
6. 可选env_file环境变量文件.env
数据持久化: 宿主机和容器映射
- ./postgres/pgdata_all:/var/lib/postgresql/data作用:数据持久化挂载
• 左侧:主机目录
./postgres/pgdata_all(相对于 docker-compose.yml)• 右侧:容器内 PostgreSQL 数据目录
• 效果:容器删除后数据不丢失
主机 容器
./postgres/pgdata_all ←→ /var/lib/postgresql/data
├── base/ ├── base/ (数据库文件)
├── global/ ├── global/ (全局数据)
├── pg_wal/ ├── pg_wal/ (事务日志)
└── postgresql.conf └── postgresql.conf环境变量配置:env_file: - .env
从外部文件加载环境变量,读取 .env 文件中的变量
# 数据库配置
POSTGRES_DB=myapp_dev
POSTGRES_INITDB_ARGS=--encoding=UTF8 --locale=en_US.utf8
# 时区设置
TZ=Asia/Shanghai
# 其他配置
PGDATA=/var/lib/postgresql/data配置信息示意图
🚀 运行时效果🐘 db 服务配置
📄 docker-compose.yml
version: '3.3'
指定配置版本
services:
定义服务列表
image: postgres:12
使用 PostgreSQL 12 镜像
restart: always
自动重启策略
volumes:
./postgres/pgdata_all
↕️
/var/lib/postgresql/data
environment:
• POSTGRES_USER=service
• POSTGRES_PASSWORD=service
command:
max_connections=10000
.env 文件
额外环境变量
expose: 5432
内部端口声明
ports: 5432:5432
主机端口映射
hostname: pg.local
容器主机名
Docker 容器
━━━━━━━━━━
名称: db
主机名: pg.local
💾 数据持久化
容器删除数据不丢失
🌐 网络访问
• 内部: db:5432
• 外部: localhost:5432
🔄 自动恢复
崩溃后自动重启
⚡ 高并发支持
最多 10000 连接
谢谢关注收藏
⏰ 刚刷到的朋友注意啦!
点击【关注】锁定宝藏库,从此升职加薪不迷路 ✨
轻量云主机限时优惠
RackNerd
☁ 主机显示特惠:只要80元(3TB流量,1vcpu,50GB硬盘)
购买地址[3]:https://my.racknerd.com/aff.php?aff=14942
CloudCone
CloudCone 特惠轻量云主机:购买地址[4]:https://app.cloudcone.com/?ref=12332

📢 腾讯云资源限时福利
有云服务器、CDN、对象存储、网络防护等需求的朋友,欢迎联系下方腾讯云官方销售 👇
✔️ 内部专属折扣,价格更优
✔️ 量大可谈,支持定制方案
✔️ 技术咨询与售后无忧
引用链接
[1] Docker技术在PostgreSQL数据库部署中的应用与探究: https://www.yicaiai.com/news/article/677e84864ddd79f11a001fd2[2] PostgreSQL: The world's most advanced open source database: https://www.postgresql.org/[3] 购买地址: https://my.racknerd.com/aff.php?aff=14942[4] 购买地址: https://app.cloudcone.com/?ref=12332

评论区