PostgreSQL 17 与 Redis 8.0 的 Docker Compose 部署配置

提供完整的docker-compose.yml配置,用于部署PostgreSQL 17.6和Redis 8.0.5,实现数据持久化。包含服务配置、健康检查、性能调优、安全注意事项、快速启动命令及故障排查方法。支持本地目录映射、自定义网络和初始化脚本。

作者:zhuge···预计阅读 18 分钟·203 阅读·0 评论
PostgreSQL 17 与 Redis 8.0 的 Docker Compose 部署配置

以下是一个完整的 docker-compose.yml 配置文件,用于部署 PostgreSQL 17.6 和 Redis 8.0.5,并确保数据持久化保存:

version: '3.8'

services:
  # PostgreSQL 17.6 服务
  postgres:
    image: postgres:17.6
    container_name: postgres-17
    restart: unless-stopped
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: StrongPassword123!  # 请在生产环境中修改
      POSTGRES_DB: mydatabase
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      # 数据持久化卷
      - postgres_data:/var/lib/postgresql/data
      # 初始化脚本目录(可选)
      - ./postgres-init:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    networks:
      - app-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: >
      postgres 
      -c max_connections=100 
      -c shared_buffers=256MB 
      -c effective_cache_size=1GB

  # Redis 8.0.5 服务
  redis:
    image: redis:8.0.5-alpine
    container_name: redis-8
    restart: unless-stopped
    command: >
      redis-server 
      --requirepass RedisSecurePass123!  # 请在生产环境中修改
      --appendonly yes 
      --appendfsync everysec 
      --maxmemory 512mb 
      --maxmemory-policy allkeys-lru
    volumes:
      # 数据持久化卷
      - redis_data:/data
      # Redis 配置文件(可选)
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

# 自定义网络
networks:
  app-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

# 持久化数据卷定义
volumes:
  postgres_data:
    name: postgres_persistent_data
    driver: local
    driver_opts:
      type: none
      o: bind
      device: ./data/postgres  # 本地目录映射
  
  redis_data:
    name: redis_persistent_data
    driver: local
    driver_opts:
      type: none
      o: bind
      device: ./data/redis      # 本地目录映射

在运行前,建议创建以下目录结构:

your-project/
├── docker-compose.yml          # 上面的配置文件
├── data/                       # 数据目录(docker-compose.yml 自动创建)
│   ├── postgres/              # PostgreSQL 数据
│   └── redis/                 # Redis 数据
├── postgres-init/             # (可选)PostgreSQL 初始化脚本
│   └── 01-init.sql           # 初始化 SQL 脚本
└── redis.conf                 # (可选)Redis 自定义配置文件

🚀 快速开始

1. 启动服务

# 创建项目目录并进入
mkdir my-app && cd my-app

# 创建 docker-compose.yml 文件,粘贴上面的配置

# 启动服务(后台运行)
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

2. 验证服务运行

# 检查 PostgreSQL
docker-compose exec postgres psql -U admin -d mydatabase -c "SELECT version();"

# 检查 Redis
docker-compose exec redis redis-cli -a RedisSecurePass123! ping
# 返回 "PONG" 表示成功

3. 管理命令

# 停止服务(保留数据)
docker-compose down

# 停止并删除所有数据
docker-compose down -v

# 重启特定服务
docker-compose restart postgres

# 查看资源使用情况
docker-compose stats

🔧 高级配置选项

PostgreSQL 性能调优(可选)

在 postgres-init/01-init.sql 中添加:

-- 创建额外数据库
CREATE DATABASE appdb;

-- 创建用户和权限
CREATE USER appuser WITH PASSWORD 'UserPass123';
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;

-- 性能参数调整
ALTER SYSTEM SET work_mem = '16MB';
ALTER SYSTEM SET maintenance_work_mem = '128MB';

Redis 配置优化(可选)

# 连接设置
maxclients 10000
timeout 300

# 持久化策略
save 900 1
save 300 10
save 60 10000

# 内存管理
maxmemory-policy volatile-lru

# 安全设置
rename-command FLUSHDB ""
rename-command FLUSHALL ""

📊 数据持久化说明

PostgreSQL 数据位置

  • 容器内路径: /var/lib/postgresql/data
  • 宿主机路径: ./data/postgres(项目目录下)
  • 备份方法:
# 备份数据库
docker-compose exec postgres pg_dump -U admin mydatabase > backup.sql

# 恢复数据库
cat backup.sql | docker-compose exec -T postgres psql -U admin mydatabase

Redis 数据位置

  • 容器内路径: /data
  • 宿主机路径: ./data/redis(项目目录下)
  • 数据文件: appendonly.aof(AOF 持久化文件)
  • 备份方法:
# 创建 RDB 快照
docker-compose exec redis redis-cli -a RedisSecurePass123! SAVE

# 复制数据文件
cp ./data/redis/appendonly.aof ./backup/

🛡️ 安全注意事项

  • 网络暴露
# 生产环境建议移除 ports 暴露,或限制 IP 访问
ports:
  - "127.0.0.1:5432:5432"  # 仅本地访问
# 或使用内部网络,不暴露端口
# ports: []  # 不暴露端口,仅容器间访问
  • 环境变量管理
# 创建 .env 文件(不要提交到版本控制)
POSTGRES_PASSWORD=你的强密码
REDIS_PASSWORD=你的强密码

然后在 docker-compose.yml 中引用:

environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

command: >
  redis-server 
  --requirepass ${REDIS_PASSWORD}

🔍 故障排查

  • 常见问题:
  • 端口冲突:
# 检查端口占用
netstat -tulpn | grep :5432
# 或修改 docker-compose.yml 中的端口映射
ports:
  - "5433:5432"  # 外部:内部
  • 权限问题:
# 确保本地数据目录有正确权限
chmod 755 ./data
  • 服务启动失败:
# 查看详细日志
docker-compose logs postgres
docker-compose logs redis

# 尝试重新构建
docker-compose down -v
docker-compose up -d --build
  • 监控命令:
# 查看服务状态
docker-compose ps

# 实时日志
docker-compose logs -f --tail=50

# 资源使用
docker-compose top

# 进入容器检查
docker-compose exec postgres bash
docker-compose exec redis redis-cli -a RedisSecurePass123! INFO

📝 版本信息验证

部署完成后,验证版本:

# PostgreSQL 版本
docker-compose exec postgres postgres --version
# 输出:postgres (PostgreSQL) 17.6

# Redis 版本
docker-compose exec redis redis-server --version
# 输出:Redis server v=8.0.5 sha=...

相关文章

评论

加载中...