本文详细讲解 Docker 容器化安装 Redis 的完整流程,涵盖镜像拉取、容器部署、数据持久化、自定义配置、密码认证、远程连接及日常运维,适配 CentOS、Ubuntu 等主流 Linux 系统,兼顾新手入门与生产环境基础配置,全程命令可复制、步骤可复现,解决 Redis 安装中“数据丢失”“远程连接失败”“安全隐患”等核心痛点。

一、前言

Redis 是一款高性能的开源内存数据库,广泛应用于缓存、会话存储、消息队列等场景,其轻量、高效的特性与 Docker 容器化部署的“环境隔离、快速部署、可移植性”高度契合。传统安装 Redis 需手动配置依赖、调整配置文件,易出现版本冲突、环境污染等问题;而 Docker 安装可一键拉取官方镜像,无需复杂依赖配置,同时通过目录挂载实现数据持久化,大幅降低部署与维护成本。

本文基于 Docker 部署 Redis 最新稳定版,全程采用命令行操作,重点讲解“持久化配置”“安全加固”“远程连接”三大核心需求,适合开发、测试及轻量级生产环境,新手可直接跟随步骤操作,无需额外技术储备。

二、安装前准备

2.1 环境要求

  • 操作系统:Linux(CentOS 7/8、Ubuntu 18.04+),本文以 CentOS 7 为例演示

  • Docker 版本:19.03 及以上(确保容器功能正常)

  • 网络要求:能访问 Docker Hub 官方仓库(用于拉取 Redis 镜像)

  • 权限要求:使用 root 权限或 sudo 权限执行命令(避免目录挂载、端口开放等操作权限不足)

2.2 验证 Docker 环境

安装前需确认 Docker 已安装且服务正常运行,执行以下命令验证:

# 查看 Docker 版本
docker --version

# 查看 Docker 服务运行状态
systemctl status docker

若输出 Docker 版本信息(如 Docker version 26.1.1, build XXXXX),且服务状态为“active (running)”,说明 Docker 环境正常;若未安装 Docker,可参考 Docker 官方文档完成安装,或执行以下快速安装命令(CentOS 专用):

# 安装 Docker 依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务并设置开机自启
systemctl start docker
systemctl enable docker

2.3 规划挂载目录(数据持久化关键)

Docker 容器默认采用临时存储,若容器被删除,Redis 中的数据会全部丢失。因此,需提前在宿主机创建目录,将 Redis 的配置文件、数据目录挂载到宿主机,实现数据持久化,同时方便后续修改配置。

执行以下命令创建挂载目录(目录路径可自定义,本文以 /mydata/redis 为例):

# 创建 Redis 配置目录(存放 redis.conf)
mkdir -p /mydata/redis/conf

# 创建 Redis 数据目录(存放持久化数据)
mkdir -p /mydata/redis/data

目录说明:

  • /mydata/redis/conf:用于挂载 Redis 配置文件,后续修改配置无需进入容器,直接在宿主机编辑即可。

  • /mydata/redis/data:用于挂载 Redis 数据文件,Redis 的持久化数据(如 AOF、RDB 文件)会存储在此目录,容器删除后数据不丢失。

三、Docker 安装 Redis 详细步骤

3.1 拉取 Redis 官方镜像

优先使用 Docker Hub 官方 Redis 镜像,确保版本纯净、安全可信赖,避免使用第三方镜像导致的安全隐患。执行以下命令拉取 Redis 最新稳定版镜像:

# 拉取 Redis 最新稳定版
docker pull redis:latest

说明:

  • redis:latest:表示拉取 Redis 最新稳定版,若需指定具体版本(如 7.2.4),可执行 docker pull redis:7.2.4,生产环境建议指定具体版本,避免自动更新导致兼容性问题。

  • 拉取完成后,执行 docker images | grep redis 验证镜像是否拉取成功,若输出类似以下内容,说明镜像拉取成功:

redis    latest    xxxxxxxx    1 month ago    117MB

3.2 配置 Redis 配置文件(核心步骤)

Redis 官方镜像默认没有自定义配置文件,需手动在宿主机创建 redis.conf 配置文件,通过挂载方式映射到容器内部,实现自定义配置(如密码、持久化、远程连接等)。

执行以下命令创建并编辑配置文件:

vi /mydata/redis/conf/redis.conf

复制以下配置内容(生产环境基础优化配置,直接可用),粘贴到配置文件中:

# 绑定IP,0.0.0.0 表示允许所有IP访问(支持远程连接)
bind 0.0.0.0
# 关闭保护模式(允许外部IP连接,默认开启,会阻止远程连接)
protected-mode no
# 设置 Redis 登录密码(自定义,建议设置复杂密码,如 Redis@123456)
requirepass 123456
# 开启 AOF 持久化(重启后数据不丢失,推荐开启)
appendonly yes
# AOF 持久化文件名称
appendfilename "appendonly.aof"
# 禁止 Redis 后台运行(Docker 容器中无需后台运行,否则容器会启动失败)
daemonize no
# Redis 监听端口(默认6379,可自定义)
port 6379
# 连接超时时间(单位:秒,0表示无超时)
timeout 0
# TCP 连接保持时间(单位:秒)
tcp-keepalive 300
# 最大内存限制(根据宿主机内存调整,如1G,单位:bytes)
maxmemory 1073741824
# 内存淘汰策略(当内存达到上限时,删除最少使用的key)
maxmemory-policy allkeys-lru

保存退出:按 ESC 键,输入 :wq 回车即可完成配置文件保存。

关键配置说明(必看):

  • bind 0.0.0.0:必须设置为 0.0.0.0,否则只能在容器内部或宿主机本地连接,无法远程访问。

  • protected-mode no:关闭保护模式,否则外部IP无法连接 Redis(默认开启,仅允许本地连接)。

  • requirepass 123456:设置登录密码,避免未授权访问,生产环境建议修改为复杂密码。

  • appendonly yes:开启 AOF 持久化,Redis 会将所有写操作记录到 aof 文件中,重启容器后数据可恢复;若不开启,容器删除后数据会丢失。

  • daemonize no:禁止后台运行,Docker 容器中若设置为 yes,Redis 会后台运行,导致容器启动后立即退出。

3.3 启动 Redis 容器(最终核心命令)

使用 docker run 命令启动 Redis 容器,整合镜像、端口映射、目录挂载、环境配置等参数,执行以下命令(直接复制即可,可根据需求修改密码和端口):

docker run -d \
--name redis \
--restart always \
-p 6379:6379 \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /mydata/redis/data:/data \
redis:latest redis-server /etc/redis/redis.conf

命令参数详解(关键参数必看):

  • -d:后台运行容器(守护进程模式),避免占用终端。

  • --name redis:给容器命名为 redis,便于后续通过名称操作容器(可自定义,如 redis7)。

  • --restart always:设置容器开机自启,避免服务器重启后容器失效,无需手动启动。

  • -p 6379:6379:端口映射,将宿主机 6379 端口映射到容器内部 6379 端口,外部通过宿主机 IP:6379 访问 Redis。

  • -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf:将宿主机的配置文件挂载到容器内部默认配置文件路径,容器启动时会加载此配置。

  • -v /mydata/redis/data:/data:将宿主机的数据目录挂载到容器内部数据目录,实现数据持久化。

  • redis:latest:指定使用的 Redis 镜像(若拉取了具体版本,需替换为对应版本,如 redis:7.2.4)。

  • redis-server /etc/redis/redis.conf:指定容器启动时执行的命令,加载自定义配置文件启动 Redis。

3.4 验证容器启动状态

容器启动后,执行以下命令查看是否正常运行:

# 查看正在运行的容器,筛选 Redis 容器
docker ps | grep redis

# 若未正常运行,查看容器日志排查问题
docker logs redis

若输出中包含“Ready to accept connections”,说明 Redis 容器启动成功,可正常使用;若启动失败,可通过日志排查问题(常见原因:配置文件错误、目录权限不足)。

四、Redis 基础操作与远程连接

4.1 容器内部连接 Redis

若需在宿主机本地操作 Redis,可进入容器内部,通过 redis-cli 命令连接,步骤如下:

# 进入 Redis 容器内部
docker exec -it redis /bin/bash

# 连接 Redis(默认连接本地 6379 端口)
redis-cli

# 输入密码登录(密码为配置文件中设置的 requirepass 值)
AUTH 123456

# 测试 Redis 操作(存取值)
set test_key "docker_redis_test"
get test_key

若输出 "docker_redis_test",说明 Redis 运行正常,可正常执行读写操作;退出容器执行 exit 命令即可。

4.2 远程连接 Redis(Navicat/Redis Desktop Manager)

开发过程中,通常需要通过远程工具(如 Navicat、Redis Desktop Manager)连接 Redis,需完成以下两步配置:

4.2.1 开放宿主机 6379 端口

远程连接需确保宿主机防火墙开放 6379 端口(CentOS 防火墙操作如下):

# 开放 6379 端口(永久生效)
firewall-cmd --add-port=6379/tcp --permanent

# 重新加载防火墙配置,使端口开放生效
firewall-cmd --reload

# 验证端口是否开放(输出 yes 表示开放成功)
firewall-cmd --query-port=6379/tcp

说明:若使用 Ubuntu 系统,防火墙命令为 ufw allow 6379/tcp,无需加 --permanent 参数。

4.2.2 远程工具连接配置

打开远程工具(以 Redis Desktop Manager 为例),填写以下信息:

  • Host:宿主机 IP 地址(云服务器需填写公网 IP,局域网需填写内网 IP)。

  • Port:6379(与容器端口映射一致)。

  • Password:配置文件中设置的密码(如 123456)。

  • 其他参数:默认即可,无需修改。

点击连接,若连接成功,即可在远程工具中操作 Redis(存取值、创建哈希、列表等);若连接失败,检查宿主机 IP 是否正确、端口是否开放、密码是否正确。

五、Redis 日常运维命令(Docker 版)

整理日常高频运维命令,方便快速操作 Redis 容器,无需记忆复杂命令:

# 1. 启动 Redis 容器
docker start redis

# 2. 停止 Redis 容器
docker stop redis

# 3. 重启 Redis 容器(修改配置文件后必执行)
docker restart redis

# 4. 查看 Redis 容器运行日志(排查启动/运行故障)
docker logs redis

# 5. 进入 Redis 容器内部
docker exec -it redis /bin/bash

# 6. 查看 Redis 容器详细信息(如挂载目录、端口映射等)
docker inspect redis

# 7. 删除 Redis 容器(数据不会丢失,因已挂载宿主机目录)
docker rm -f redis

# 8. 查看 Redis 版本(容器内部执行)
redis-cli -v

# 9. 测试 Redis 连接(容器内部执行,无需登录)
redis-cli -a 123456 ping

说明:redis-cli -a 123456 ping 命令中,-a 后面跟的是 Redis 密码,执行后若输出 PONG,说明 Redis 运行正常。

六、常见问题排查与解决

6.1 容器启动失败,日志提示“Permission denied”

原因:宿主机挂载目录(/mydata/redis)权限不足,Redis 容器无法写入数据或读取配置文件。

解决方法:给宿主机挂载目录授权(授予最大权限,避免权限不足问题):

chmod -R 777 /mydata/redis

授权后,重新启动容器:docker restart redis

6.2 远程连接失败,提示“Could not connect to Redis”

常见原因及解决方法:

  • 宿主机防火墙未开放 6379 端口:重新执行 4.2.1 节的端口开放命令,确保端口开放。

  • Redis 配置文件未设置 bind 0.0.0.0 或 protected-mode 未设为 no:修改配置文件,重新启动容器。

  • 密码错误:确认远程工具填写的密码与配置文件中 requirepass 的值一致。

  • 云服务器安全组未开放 6379 端口:登录云服务器控制台,在安全组规则中添加 6379 端口(TCP 协议,允许所有 IP 访问或指定 IP 访问)。

6.3 修改配置文件后,配置不生效

原因:修改配置文件后,未重启 Redis 容器,容器仍加载旧配置。

解决方法:修改配置文件后,执行以下命令重启容器,使配置生效:

docker restart redis

6.4 Redis 数据丢失

原因:未开启持久化(appendonly no),或未挂载数据目录,容器删除后数据丢失。

解决方法:修改配置文件,设置 appendonly yes,确保数据目录挂载正常(/mydata/redis/data),重启容器即可。

七、生产环境优化建议

本文配置适用于开发、测试环境,若用于生产环境,建议进一步优化以下配置,提升 Redis 稳定性和安全性:

  • 密码优化:设置复杂密码(包含字母、数字、特殊符号),避免简单密码被暴力破解。

  • 端口优化:修改默认 6379 端口,避免端口暴露被恶意扫描。

  • 内存优化:根据宿主机内存大小,合理设置 maxmemory 和 maxmemory-policy,避免 Redis 占用过多内存导致宿主机卡顿。

  • 持久化优化:开启 AOF 持久化的同时,配置 AOF 重写策略,避免 AOF 文件过大。

  • 安全优化:限制访问 Redis 的 IP(将 bind 改为指定 IP),关闭不必要的命令(如 flushall、flushdb),避免误操作或恶意攻击。

  • 备份优化:定期备份 /mydata/redis/data 目录下的持久化文件,防止数据丢失。

八、总结

本文通过 Docker 容器化方式安装 Redis,核心优势在于“快速部署、环境隔离、数据持久化”,全程无需复杂的依赖配置,新手可快速上手。关键步骤总结如下:

  1. 准备工作:验证 Docker 环境,创建挂载目录(配置+数据)。

  2. 拉取镜像:通过 docker pull 拉取 Redis 官方镜像。

  3. 配置文件:创建自定义 redis.conf,设置密码、持久化、远程连接等核心配置。

  4. 启动容器:通过 docker run 命令启动容器,实现端口映射、目录挂载、开机自启。

  5. 验证与连接:查看容器状态,测试本地连接,配置远程连接。

通过以上步骤,即可完成 Redis 的容器化部署,满足开发、测试及轻量级生产环境的需求。后续可根据实际业务场景,优化配置、加强安全防护,确保 Redis 稳定运行。

更多推荐