Docker 安装 Redis 并实现持久化

在 Docker 中安装 Redis 并实现持久化,需通过**卷挂载(Volume Mount)**将容器内的数据目录映射到主机,同时需在 Redis 配置文件中启用持久化选项(AOF 或 RDB)。以下是详细步骤和配置说明:

一、核心步骤

  1. 创建本地数据和配置目录

    在主机上创建目录用于存储 Redis 数据和配置文件(例如 /data/redis):

    复制代码

    bash

    |------------------------------------------------|
    | mkdir -p /data/redis/data # 存储持久化文件(RDB/AOF) |
    | mkdir -p /data/redis/conf # 存储 Redis 配置文件 |

  2. 获取 Redis 配置文件

    从 Redis 官方仓库下载与镜像版本匹配的 redis.conf 文件,或手动创建并编辑以下关键配置:

    复制代码

    ini

    |-----------------------------------------------|
    | # 开启 AOF 持久化(推荐) |
    | appendonly yes |
    | appendfilename "appendonly.aof" |
    | appendfsync everysec # 每秒同步一次,平衡性能与数据安全 |
    | |
    | # 或开启 RDB 持久化(二选一) |
    | save 900 1 # 900 秒内至少 1 个 key 变化则触发快照 |
    | save 300 10 # 300 秒内至少 10 个 key 变化则触发快照 |
    | save 60 10000 # 60 秒内至少 10000 个 key 变化则触发快照 |
    | dbfilename dump.rdb # RDB 文件名 |
    | |
    | # 其他必要配置 |
    | bind 0.0.0.0 # 允许所有 IP 连接(生产环境需限制) |
    | protected-mode no # 关闭保护模式(需配合密码使用) |
    | requirepass yourpassword # 设置密码(必填) |

  3. 运行 Redis 容器并挂载卷

    使用 -v 参数将主机目录挂载到容器,并指定配置文件:

    复制代码

    bash

    |--------------------------------------------------------------------|
    | docker run -d \ |
    | --name redis-persistent \ |
    | -p 6379:6379 \ |
    | -v /data/redis/data:/data \ |
    | -v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \ |
    | redis:7.0.4 \ |
    | redis-server /usr/local/etc/redis/redis.conf |

    参数说明

    • -v /data/redis/data:/data:将容器内的 /data 目录(存储 RDB/AOF 文件)映射到主机。
    • -v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:挂载自定义配置文件。
    • redis-server /usr/local/etc/redis/redis.conf:指定容器启动时使用的配置文件路径。

二、持久化方案对比

方案 原理 配置项 适用场景
AOF 记录所有写操作命令,重启后重放命令恢复数据 appendonly yes 数据安全性要求高,允许少量性能损耗
RDB 定期生成内存快照到磁盘 save 900 1 数据备份、灾难恢复,对性能影响较小
混合 AOF 记录增量数据 + RDB 定期快照 同时启用 AOF 和 RDB 平衡安全性与性能(Redis 4.0+ 支持)

推荐配置

  • 生产环境 :启用 AOF(appendonly yes)并设置 appendfsync everysec,同时定期备份 RDB 文件。
  • 测试环境:可仅启用 RDB 以简化配置。

三、验证持久化

  1. 写入测试数据

    复制代码

    bash

    |--------------------------------------------------------------|
    | docker exec -it redis-persistent redis-cli -a yourpassword |
    | 127.0.0.1:6379> SET test_key "Hello, Redis!" |
    | 127.0.0.1:6379> EXIT |

  2. 检查持久化文件

    在主机 /data/redis/data 目录下应生成 appendonly.aof(AOF 启用时)或 dump.rdb(RDB 启用时)。

  3. 重启容器并验证数据

    复制代码

    bash

    |--------------------------------------------------------------|
    | docker restart redis-persistent |
    | docker exec -it redis-persistent redis-cli -a yourpassword |
    | 127.0.0.1:6379> GET test_key # 应返回 "Hello, Redis!" |

四、高级优化

  1. 性能调优
    • AOF 配置 appendfsync everysec 而非 always,减少磁盘 I/O 压力。
    • 使用 SSD 存储持久化文件目录。
  2. 安全加固
    • 限制 Redis 绑定 IP(如 bind 192.168.1.100)。
    • 启用 TLS 加密(需额外配置证书)。
  3. 集群部署
    若需高可用,可结合 Redis Sentinel 或 Cluster 模式,并确保每个节点的持久化配置一致。

五、常见问题

  1. 权限错误

    若容器启动失败并提示 Permission denied,确保主机目录权限正确:

    复制代码

    bash

    |------------------------------------------------------------------|
    | chown -R 999:999 /data/redis/data # Redis 容器默认用户 UID/GID 为 999 |

  2. 配置不生效

    检查容器内是否实际加载了自定义配置文件:

    复制代码

    bash

    |------------------------------------------------------------------------|
    | docker exec -it redis-persistent cat /usr/local/etc/redis/redis.conf |

  3. 数据未持久化

    • 确认 appendonly yessave 规则已正确配置。
    • 检查主机目录是否写入成功(如 ls /data/redis/data)。