使用 Docker 安装 Redis 的完整指南
更新说明:本文基于Redis 8.0.2稳定版本,通过Docker容器技术实现快速部署,重点讲解配置文件优化与安全加固方案,适用于生产环境部署参考。
一、环境准备
1.1 系统要求
- Linux系统(CentOS 7+/Ubuntu 20.04+)
- Docker 20.10.0+
- Docker Compose 1.29.0+
1.2 软件版本
- Redis: 6.2.6
- 持久化存储:AOF + RDB混合模式
- 安全策略:密码认证 + 防火墙限制
二、部署流程
2.1 拉取官方镜像
# 拉取指定版本镜像docker pull redis:8.0.2# 验证镜像docker images -a# 输出示例:# REPOSITORY TAG IMAGE ID CREATED SIZE# redis 8.0.2 7614ae9453d1 23 months ago 113MB
2.2 创建配置体系
目录结构规划
mkdir -p /home/redis/{conf,data,logs}touch /home/redis/conf/redis.config
配置文件详解(redis.config
)
# ================== 安全与访问控制 ==================# 允许外部访问(注释掉 bind 可接受所有IP连接)# bind 127.0.0.1# Redis 监听端口port 6379# 设置客户端连接密码:yourPossword替换自己密码(如不需要可删除该行)requirepass yourPossword# ================== 运行模式与进程管理 ==================# 在 Docker 中建议设置为 no(避免与容器运行冲突)daemonize no# PID 文件路径(仅当 daemonize 为 yes 时有效)# pidfile /home/redis/run/redis6379.pid# ================== 持久化配置(RDB) ==================# 快照保存策略(在指定时间内发生指定次数写操作则保存)save 900 1save 300 10save 60 10000# 是否压缩 RDB 文件rdbcompression yes# RDB 快照文件名dbfilename dump.rdb# 数据持久化目录(需挂载宿主机目录)dir /home# ================== AOF 持久化配置 ==================appendonly yesappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb# ================== 性能与资源管理 ==================# 最大客户端连接数maxclients 10000# TCP 连接队列大小(用于应对突发连接请求)tcp-backlog 511# 客户端空闲超时时间(单位:秒),设为 0 表示永不超时timeout 60# TCP 保持连接检测间隔(单位:秒)tcp-keepalive 300# ================== 数据库与内存优化 ==================# 设置数据库数量(默认为 16 个,编号 0~15)databases 16# 内存优化参数(适用于小对象存储)hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64# ================== 日志配置 ==================# 是否启用系统日志(syslog)syslog-enabled yes# 日志记录级别(debug, verbose, notice, warning)loglevel notice# 日志输出位置(stdout 表示标准输出,容器中通常为日志采集服务)logfile stdout# 可选:自定义日志文件路径(需确保目录存在且可写)# logfile /var/log/redis/redis-server.log# ================== 慢查询日志设置 ==================# 记录执行时间超过指定微秒的命令(单位:微秒)slowlog-log-slower-than 10000# 慢查询日志最大长度(超出后 FIFO 覆盖)slowlog-max-len 128# ================== 其他高级选项(按需启用) ==================# 是否启用 active rehashing(释放内存)activerehashing yes# 命令重命名(用于安全加固,如禁用 CONFIG 命令)# rename-command CONFIG \"\"
2.2启动容器服务
完整部署命令
docker run -p 6379:6379 \\ --name redis \\ -v /home/redis/conf/redis.config:/etc/redis/redis.conf \\ -v /home/redis/data:/data \\ -v /home/redis/logs:/logs \\ --privileged=true \\ --restart=always \\ -d redis \\ redis-server:8.0.2 /etc/redis/redis.conf
参数解析:
-d
--privileged
-p
-v
--restart=always
三、验证与调试
3.1 容器状态检查
# 查看运行状态docker ps -a# 输出示例:# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS # a34aff536643 redis:8.0.2 \"docker-entrypoint.s…\" 59 seconds ago Up 58 seconds 6379/tcp 6379/tcp
3.2 客户端连接测试
# 进入容器docker exec -it redis6.2.6 bash# 启动客户端redis-cli# 认证操作127.0.0.1:6379> AUTH yourPassWordOK# 测试写入127.0.0.1:6379> SET test_key \"Hello Redis\"OK# 验证读取127.0.0.1:6379> GET test_key\"Hello Redis\"
四、安全加固
4.1 防火墙配置
# 开放端口firewall-cmd --zone=public --add-port=6379/tcp --permanentfirewall-cmd --reload# 验证开放firewall-cmd --list-all | grep ports
4.2 访问控制
- 网络层:阿里云/腾讯云控制台限制IP白名单
- 应用层:通过
bind
指令限制监听地址 - 认证层:强制密码验证+命令重命名
五、常见问题排查
5.1 启动失败解决方案
# 查看容器日志docker logs redis --tail 50# 常见错误及处理:1. 配置文件路径错误 → 检查-v参数映射2. 端口冲突 → 修改-p参数端口号3. 权限不足 → 添加--privileged参数
5.2 内存溢出处理
-
监控
used_memory
指标 -
优化
maxmemory-policy
策略 -
使用Redis Cluster分片集群六、性能优化建议
六、性能优化建议
maxmemory
+合适的淘汰策略七、扩展部署方案
7.1 主从复制架构
# 从节点配置片段slaveof 6379masterauth yourpossword
7.2 高可用集群
使用Docker Compose部署3节点集群:
version: \'3\'services: redis-node-1: image: redis:8.0.2 ports: - \"6380:6379\" command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000
扩展阅读:
- Redis官方文档