Docker 安装 Redis

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):

    bash 复制代码
    firewall-cmd --add-port=6379/tcp --permanent && firewall-cmd --reload
  • 检查云服务器安全组:若为云服务器(阿里云/腾讯云),需在控制台放行6379端口;

  • 检查配置:确认 redis.confbind 0.0.0.0protected-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(清空当前库)。

八、生产环境优化建议

  1. 禁用公网访问 :将 bind 0.0.0.0 改为内网IP(如 192.168.1.100),仅允许应用服务器访问;
  2. 加强密码复杂度 :使用随机复杂密码(如 P8@k9s7L2#),避免弱密码;
  3. 限制容器资源 :启动时添加 --memory=2g --cpus=1,限制Redis使用的内存和CPU;
  4. 开启Redis集群 :若需高可用,使用 docker-compose 部署Redis主从/哨兵集群;
  5. 定期备份 :定时打包 /data/redis/data 目录,防止数据丢失。

总结

Docker 安装 Redis 的核心流程:
拉取指定版本镜像 → 准备持久化目录 + 自定义配置 → 挂载目录启动容器 → 验证连接和持久化

重点关注:密码配置、持久化挂载、访问权限,这三点能解决90%的生产环境问题。该方案适配开发、测试、生产全场景,可直接复用。

相关推荐
程序员老赵2 小时前
Apache IoTDB Docker 容器化部署指南:从入门到生产环境实践
docker·apache
不穿格子的程序员2 小时前
Redis篇5——Redis深度剖析:系统的“隐形杀手”——热Key与大Key问题
数据库·redis·缓存·热key·大key
Thexhy2 小时前
基础篇:Redis核心命令及用法
java·linux·redis
少陽君3 小时前
Kubernetes Debug 专用镜像实践指南
云原生·容器·kubernetes
一过菜只因3 小时前
Docker入门
运维·docker·容器
MoonBit月兔3 小时前
海外开发者实践分享:用 MoonBit 开发 SQLC 插件(其二)
开发语言·javascript·数据库·redis·mysql·moonbit
weixin_46683 小时前
K8S-RBAC2
docker·容器·kubernetes
管理大亨3 小时前
智慧农业ELK落地方案:数据驱动精准农业
大数据·redis·python·elk·elasticsearch
kevinzeng3 小时前
Redis的IO多路复用
java·redis