在 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)。
- 确认
