Docker 运行 PG
官方镜像、卷、compose 与 backend 联调。
Docker 运行 PostgreSQL
这一课你将能做到
- 用 Docker Compose 定义带健康检查与命名卷的
postgres服务并启动 - 验证
down再up后数据仍在,会用docker volume inspect看卷 - 配置可选的 Spring
pg-dev联调方式,并与本机 MySQL 3306 / Redis 6379 并存
为什么要学
单条 docker run 适合第一节课;和后端、同事环境对齐时,Compose 文件才是可提交到仓库的「环境即代码」。命名卷避免删容器丢库;健康检查让依赖方等到「可接受连接」再启动。
官方镜像说明与 Compose 规范是操作依据;本课不取代云托管,但覆盖本地开发主路径。
先建立图像
docker-compose.dev.yml
│
▼
service: postgres
image: postgres:16-alpine
ports: 5432→5432
env: USER/PASSWORD/DB
volume: pg_data → /var/lib/postgresql/data
healthcheck: pg_isready
│
▼
本机 Spring (profile pg-dev) 或 psql
| 组件 | 端口 | 用途 |
|---|---|---|
| MySQL 8 | 3306 | CodeRoadMap 主库 |
| PostgreSQL | 5432 | 本 track 练习 |
| Redis | 6379 | redis-essentials 等 |
跟着做
步骤 1:准备 Compose 文件
在项目根或 backend/docker/ 创建 docker-compose.dev.yml(路径自定,以下为片段):
services:
postgres:
image: postgres:16-alpine
container_name: codeforge-pg
environment:
POSTGRES_USER: codeforge
POSTGRES_PASSWORD: devpass
POSTGRES_DB: codeforge_pg
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U codeforge -d codeforge_pg"]
interval: 5s
timeout: 3s
retries: 5
volumes:
pg_data:
若已有 pg-dev 容器占名,先停掉旧容器,避免冲突。
步骤 2:启动并查看状态
docker compose -f docker-compose.dev.yml up -d postgres
docker compose -f docker-compose.dev.yml ps
状态应健康或至少 Up。日志:
docker compose -f docker-compose.dev.yml logs -f postgres
见到 ready 后 Ctrl+C 退出跟随(容器继续跑)。
步骤 3:写入数据
docker compose -f docker-compose.dev.yml exec postgres \
psql -U codeforge -d codeforge_pg -c "CREATE SCHEMA IF NOT EXISTS app; SELECT 1;"