Docker 安装 Redis 是开发/生产环境中最常用的方式,核心是在线拉取镜像 + 自定义配置 + 数据持久化 (避免容器销毁丢失数据)。以下是完整的在线安装步骤(适配 Linux/macOS,Windows 仅需微调路径),兼顾开发和生产级配置。
一、前提条件
已安装 Docker 环境(验证:docker --version 输出版本号),若未安装,执行以下命令(以 CentOS 为例):
bash
# 一键安装 Docker(国内源)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 启动 Docker 并设置开机自启
systemctl start docker && systemctl enable docker
二、步骤 1:拉取 Redis 镜像(推荐指定版本)
避免使用 latest 标签(易踩版本兼容坑),推荐拉取稳定版(如 7.2、6.2):
bash
# 拉取 Redis 7.2 稳定版(可替换为 6.2、7.0 等)
docker pull redis:7.2
# 验证镜像是否拉取成功
docker images | grep redis
# 输出示例:redis 7.2 xxxxxxxx 2 hours ago 130MB
三、步骤 2:准备持久化目录和自定义配置(关键)
Redis 默认数据存储在容器内部,容器删除后数据丢失,需挂载宿主机目录实现持久化,同时自定义配置(如密码、访问权限)。
1. 创建宿主机目录(数据、配置、日志)
bash
# 创建目录(建议统一放在 /data/redis 下)
mkdir -p /data/redis/{conf,data,logs}
# 赋予读写权限(避免容器无权限操作)
chmod 777 -R /data/redis
2. 编写自定义 redis.conf 配置文件
核心配置需覆盖访问权限、密码、持久化、内存限制,避免默认配置的安全风险:
bash
# 写入配置文件到 /data/redis/conf/redis.conf
cat > /data/redis/conf/redis.conf << EOF
# 允许所有IP访问(生产环境可改为内网IP,如 192.168.1.0/24)
bind 0.0.0.0
# 关闭保护模式(否则仅本地能访问)
protected-mode no
# 端口(默认6379,可自定义)
port 6379
# 设置Redis密码(必填,避免未授权访问)
requirepass 123456
# 持久化:开启AOF(追加日志,比RDB更安全)
appendonly yes
# 每秒刷盘一次(平衡性能和数据安全)
appendfsync everysec
# 持久化:RDB快照(兜底,每5分钟/至少1个修改触发快照)
save 300 1
# 数据存储目录(容器内路径,需和挂载目录对应)
dir /data
# 日志文件路径
logfile /logs/redis.log
# 内存限制(按需设置,如 1GB,避免占满服务器内存)
maxmemory 1gb
# 内存淘汰策略(内存满时删除最少使用的Key)
maxmemory-policy allkeys-lru
# 容器内无需后台运行(由Docker -d参数接管)
daemonize no
EOF
四、步骤 3:启动 Redis 容器(生产级参数)
执行以下命令启动容器,每个参数都有明确作用,建议保留核心参数:
bash
docker run -d \
--name redis \ # 容器名称(自定义,如 redis-7.2)
--restart=always \ # 开机自启 + 容器异常时自动重启
-p 6379:6379 \ # 端口映射:宿主机6379 → 容器6379
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \ # 挂载自定义配置
-v /data/redis/data:/data \ # 挂载数据目录(持久化核心)
-v /data/redis/logs:/logs \ # 挂载日志目录
--privileged=true \ # 赋予容器特权(解决目录权限问题)
redis:7.2 \ # 使用的镜像版本
redis-server /etc/redis/redis.conf # 指定配置文件启动(覆盖默认配置)
五、步骤 4:验证 Redis 运行状态
1. 检查容器是否启动
bash
docker ps | grep redis
# 输出示例:xxxx redis:7.2 redis-server /etc/redis/redis.conf Up 5 minutes
# 若未启动,执行 docker logs redis 查看错误日志
2. 测试 Redis 连接和操作
bash
# 进入Redis容器的命令行客户端
docker exec -it redis redis-cli
# 输入密码认证(配置的 123456)
127.0.0.1:6379> AUTH 123456
OK
# 测试基本操作
127.0.0.1:6379> SET test "docker-redis" # 设置Key-Value
OK
127.0.0.1:6379> GET test # 获取Value
"docker-redis"
127.0.0.1:6379> KEYS * # 查看所有Key
1) "test"
# 验证持久化:停止并重启容器,数据仍存在
docker stop redis && docker start redis
docker exec -it redis redis-cli AUTH 123456 && GET test
# 输出 "docker-redis" 说明持久化成功
六、常用操作(运维必备)
bash
# 1. 进入Redis容器(执行Linux命令)
docker exec -it redis /bin/bash
# 2. 查看Redis实时日志
docker logs -f redis
# 或直接查看宿主机日志文件
cat /data/redis/logs/redis.log
# 3. 重启/停止/删除容器
docker restart redis # 重启
docker stop redis # 停止
docker rm -f redis # 强制删除(需先停止)
# 4. 升级Redis版本(不丢数据)
# ① 停止旧容器 → ② 拉取新版本镜像 → ③ 用相同挂载目录启动新容器
docker stop redis && docker rm redis
docker pull redis:7.4
docker run -d --name redis --restart=always -p 6379:6379 -v /data/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -v /data/redis/logs:/logs redis:7.4 redis-server /etc/redis/redis.conf
# 5. 备份Redis数据(持久化目录打包)
tar -zcvf redis-data-backup.tar.gz /data/redis/data
七、常见问题排查
1. 容器启动失败(docker ps 无输出)
- 查看日志:
docker logs redis,常见原因:- 配置文件语法错误:检查
redis.conf格式(如少分号、空格); - 端口被占用:
netstat -tulpn | grep 6379,杀掉占用进程或修改映射端口(如-p 6380:6379); - 目录权限不足:重新执行
chmod 777 -R /data/redis。
- 配置文件语法错误:检查
2. 外部无法访问Redis(如Spring Boot连接失败)
-
检查防火墙:放行6379端口(CentOS):
bashfirewall-cmd --add-port=6379/tcp --permanent && firewall-cmd --reload -
检查云服务器安全组:若为云服务器(阿里云/腾讯云),需在控制台放行6379端口;
-
检查配置:确认
redis.conf中bind 0.0.0.0和protected-mode no。
3. 数据持久化失效
- 确认挂载目录对应:容器内
dir /data需对应宿主机-v /data/redis/data:/data; - 查看AOF/RDB文件是否生成:
ls /data/redis/data,应有appendonly.aof(AOF文件)、dump.rdb(RDB文件); - 检查容器日志:
docker logs redis | grep "appendonly",确认AOF开启成功。
4. Redis内存占用过高
- 调整
redis.conf中的maxmemory(如改为 512mb),重启容器; - 执行
docker exec -it redis redis-cli AUTH 123456 && CONFIG SET maxmemory 536870912(临时生效,重启后需改配置文件); - 清理无用Key:
docker exec -it redis redis-cli AUTH 123456 && FLUSHDB(清空当前库)。
八、生产环境优化建议
- 禁用公网访问 :将
bind 0.0.0.0改为内网IP(如192.168.1.100),仅允许应用服务器访问; - 加强密码复杂度 :使用随机复杂密码(如
P8@k9s7L2#),避免弱密码; - 限制容器资源 :启动时添加
--memory=2g --cpus=1,限制Redis使用的内存和CPU; - 开启Redis集群 :若需高可用,使用
docker-compose部署Redis主从/哨兵集群; - 定期备份 :定时打包
/data/redis/data目录,防止数据丢失。
总结
Docker 安装 Redis 的核心流程:
拉取指定版本镜像 → 准备持久化目录 + 自定义配置 → 挂载目录启动容器 → 验证连接和持久化。
重点关注:密码配置、持久化挂载、访问权限,这三点能解决90%的生产环境问题。该方案适配开发、测试、生产全场景,可直接复用。