在 Docker 中安装 Redis 并实现持久化,需通过卷挂载(Volume Mount)将容器内的数据目录映射到主机,同时需在 Redis 配置文件中启用持久化选项(AOF 或 RDB)。以下是详细步骤和配置说明:
一、核心步骤
创建本地数据和配置目录
在主机上创建目录用于存储 Redis 数据和配置文件(例如/data/redis
):bash
mkdir -p /data/redis/data # 存储持久化文件(RDB/AOF)
mkdir -p /data/redis/conf # 存储 Redis 配置文件
获取 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 # 设置密码(必填)
运行 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 以简化配置。
三、验证持久化
写入测试数据:
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
检查持久化文件:
在主机/data/redis/data
目录下应生成appendonly.aof
(AOF 启用时)或dump.rdb
(RDB 启用时)。重启容器并验证数据:
bash
docker restart redis-persistent
docker exec -it redis-persistent redis-cli -a yourpassword
127.0.0.1:6379> GET test_key # 应返回 "Hello, Redis!"
四、高级优化
- 性能调优:
- AOF 配置
appendfsync everysec
而非always
,减少磁盘 I/O 压力。 - 使用 SSD 存储持久化文件目录。
- AOF 配置
- 安全加固:
- 限制 Redis 绑定 IP(如
bind 192.168.1.100
)。 - 启用 TLS 加密(需额外配置证书)。
- 限制 Redis 绑定 IP(如
- 集群部署:
若需高可用,可结合 Redis Sentinel 或 Cluster 模式,并确保每个节点的持久化配置一致。
五、常见问题
权限错误:
若容器启动失败并提示Permission denied
,确保主机目录权限正确:bash
chown -R 999:999 /data/redis/data # Redis 容器默认用户 UID/GID 为 999
配置不生效:
检查容器内是否实际加载了自定义配置文件:bash
docker exec -it redis-persistent cat /usr/local/etc/redis/redis.conf
数据未持久化:
- 确认
appendonly yes
或save
规则已正确配置。 - 检查主机目录是否写入成功(如
ls /data/redis/data
)。
- 确认