【Docker系列十三】使用 Docker Compose 部署 Redis

0 阅读2分钟

博客目录

一、Docker Compose 部署 Redis 的核心优势

二、基础部署配置
    2.1 项目目录结构
    2.2 基础 docker-compose.yml
    2.3 环境变量文件(.env)
三、生产环境部署方案
    3.1 完整配置示例
四、高级集群配置
    4.1 Redis 主从复制
    4.2 Redis 哨兵模式
五、安全加固方案
    5.1 安全配置示例
    5.2 网络隔离配置
六、监控与维护
    6.1 Prometheus 监控集成
    6.2 备份策略实现
七、性能优化建议
    7.1 资源限制配置
    7.2 内核参数优化
    7.3 持久化策略
八、日常运维管理
    8.1 常用命令
    8.2 版本升级流程
    8.3 故障排查指南

一、Docker Compose 部署 Redis 的核心优势 Docker Compose 为 Redis 部署提供了比单纯使用docker run更强大的管理能力,主要体现在以下几个方面:

声明式配置管理:所有服务参数通过 YAML 文件定义,实现配置即代码 多服务协同部署:轻松实现 Redis 与应用程序、监控系统的集成部署 环境变量支持:敏感信息与配置分离,提高安全性 快速环境重建:一键完成整个 Redis 集群的停止、重建和启动 版本控制集成:docker-compose.yml 文件可纳入 Git 等版本控制系统

二、基础部署配置 2.1 项目目录结构 推荐的标准目录布局:

redis-project/
├── docker-compose.yml
├── config/
│   └── redis.conf
├── data/
│   └── redis/
└── .env

2.2 基础 docker-compose.yml

version: "3.8"

services:
  redis:
    image: redis:7.0
    container_name: redis-server
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    restart: unless-stopped

2.3 环境变量文件(.env)

REDIS_PASSWORD=your_strong_password_here
REDIS_PORT=6379

三、生产环境部署方案 3.1 完整配置示例

version: "3.8"

services:
  redis:
    image: redis:7.0
    container_name: production_redis
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - TZ=Asia/Shanghai
    ports:
      - "${REDIS_PORT}:6379"
    volumes:
      - redis_data:/data
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf:ro
    networks:
      - redis_network
    deploy:
      resources:
        limits:
          cpus: "2"
          memory: 4G
    healthcheck:
      test:
        [
          "CMD",
          "redis-cli",
          "--no-auth-warning",
          "-a",
          "${REDIS_PASSWORD}",
          "ping",
        ]
      interval: 30s
      timeout: 5s
      retries: 3

volumes:
  redis_data:
    driver: local
    driver_opts:
      type: none
      device: ./data/redis
      o: bind

networks:
  redis_network:
    driver: bridge

四、高级集群配置 4.1 Redis 主从复制

services:
  redis-master:
    image: redis:7.0
    command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
    ports:
      - "6379:6379"
    volumes:
      - master_data:/data

  redis-replica:
    image: redis:7.0
    command: >
      redis-server --requirepass ${REDIS_PASSWORD}
      --masterauth ${REDIS_PASSWORD}
      --replicaof redis-master 6379
      --appendonly yes
    depends_on:
      - redis-master
    volumes:
      - replica_data:/data

volumes:
  master_data:
  replica_data:

4.2 Redis 哨兵模式

services:
  redis-master:
    image: redis:7.0
    command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
    networks:
      - redis-net

  redis-replica:
    image: redis:7.0
    command: >
      redis-server --requirepass ${REDIS_PASSWORD}
      --masterauth ${REDIS_PASSWORD}
      --replicaof redis-master 6379
      --appendonly yes
    depends_on:
      - redis-master
    networks:
      - redis-net

  redis-sentinel1:
    image: redis:7.0
    command: redis-sentinel /sentinel.conf
    volumes:
      - ./sentinel1.conf:/sentinel.conf
    depends_on:
      - redis-master
    networks:
      - redis-net

networks:
  redis-net:
    driver: bridge

五、安全加固方案 5.1 安全配置示例

services:
  redis:
    image: redis:7.0
    user: "999:999"
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
    command: >
      redis-server
      --requirepass ${REDIS_PASSWORD}
      --rename-command FLUSHDB ""
      --rename-command FLUSHALL ""
      --rename-command CONFIG ""
    volumes:
      - ./tls:/tls

5.2 网络隔离配置

networks:
  redis_internal:
    internal: true
  redis_external:
    driver: bridge

services:
  redis:
    networks:
      - redis_internal
  app:
    networks:
      - redis_internal
      - redis_external

六、监控与维护 6.1 Prometheus 监控集成

services:
  redis:
    image: redis:7.0
    command: redis-server --enable-prometheus-metrics
    ports:
      - "6379:6379"
      - "9121:9121"
    depends_on:
      - redis-exporter

  redis-exporter:
    image: oliver006/redis_exporter
    ports:
      - "9121:9121"
    environment:
      - REDIS_ADDR=redis://redis:6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}

  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

6.2 备份策略实现

services:
  redis:
    # ...原有配置...
    volumes:
      - redis_data:/data
      - ./backups:/backups

  redis-backup:
    image: redis:7.0
    depends_on:
      - redis
    volumes:
      - ./backups:/backups
    command: >
      sh -c 'while true; do
        sleep 86400;
        redis-cli -h redis -a $${REDIS_PASSWORD} --rdb /backups/dump-$$(date +%Y%m%d).rdb;
      done'
    environment:
      REDIS_PASSWORD: ${REDIS_PASSWORD}

七、性能优化建议 7.1 资源限制配置

services:
  redis:
    deploy:
      resources:
        limits:
          cpus: "4"
          memory: 8G
        reservations:
          memory: 4G
    environment:
      - MAXMEMORY=6gb
      - MAXMEMORY_POLICY=allkeys-lru

7.2 内核参数优化

services:
  redis:
    sysctls:
      - net.core.somaxconn=65535
      - vm.overcommit_memory=1
    privileged: true

7.3 持久化策略

services:
  redis:
    command: >
      redis-server
      --save 900 1
      --save 300 10
      --save 60 10000
      --appendonly yes
      --appendfsync everysec
      --auto-aof-rewrite-percentage 100
      --auto-aof-rewrite-min-size 64mb

八、日常运维管理 8.1 常用命令 启动所有服务:

docker-compose up -d

查看服务日志:

docker-compose logs -f redis

执行 Redis CLI:

docker-compose exec redis redis-cli -a ${REDIS_PASSWORD}

8.2 版本升级流程 备份现有数据 修改 docker-compose.yml 中的镜像版本 执行滚动更新:

docker-compose pull redis
docker-compose up -d --force-recreate redis

验证数据完整性 8.3 故障排查指南 检查服务状态:

docker-compose ps
docker-compose top redis

分析性能问题:

docker-compose exec redis redis-cli --latency
docker-compose exec redis redis-cli INFO STATS

原文链接:blog.csdn.net/qyj19920704…