1. 场景说明
在日常的开发、测试乃至轻量级的生产环境中,Redis 都是不可或缺的高性能内存数据库。相比于传统的包管理工具(如 yum 或 apt)安装,使用 Docker Compose 部署 Redis 具有 环境隔离好、配置版本化、迁移成本低 的显著优势。
本文将演示如何使用 docker-compose 快速、优雅地拉起一个 Redis 服务,并一步到位地完成设置访问密码 与开启数据持久化(RDB + AOF)等核心配置,让你在享受容器化便利的同时,保障数据的安全性。
2. 环境准备
在开始操作之前,请确保您的服务器或本地机器已满足以下条件:
操作系统:
Linux / MacOS / Windows (WSL2)已安装
https://blog.hallucodex.com/archives/wei-ming-ming-wen-zhang
可以通过以下命令验证环境:
docker -v
docker compose version3. 目录规划
养成良好的运维习惯,我们先为 Redis 服务规划一个干净的挂载目录。我们将创建三个子目录,分别用于存放配置、数据和日志:
# 创建工作主目录
mkdir -p /opt/docker/redis
cd /opt/docker/redis
# 创建配置、数据、日志目录
mkdir -p conf data logs此时你的目录结构应当如下:
/opt/docker/redis/
├── conf/ # 存放 redis.conf 配置文件
├── data/ # 存放持久化的 RDB 和 AOF 数据文件
├── logs/ # 存放 Redis 运行日志
└── docker-compose.yml4. 核心配置文件解析
4.1 准备 redis.conf
强烈建议不要使用纯命令行传参的方式,而是挂载 redis.conf 文件,这样更利于后续的调优和维护。
在我们的新建的 conf 目录下,创建一个基础的 redis.conf 文件:
vim conf/redis.conf填入以下核心配置(您可以根据实际需求修改密码):
# 允许所有网络接口连接(容器内部需要设置为 0.0.0.0)
bind 0.0.0.0
# 关闭保护模式,使得外部网络可以访问连接
protected-mode no
# 设置 Redis 访问密码 (强烈建议修改为强密码)
requirepass YourStrongPassword123!
# 开启 AOF 数据持久化,确保数据不丢失
appendonly yes
appendfilename "appendonly.aof"
# AOF 同步策略:每秒同步一次(性能与安全的最佳折中)
appendfsync everysec
# 数据库文件存放目录(对应容器内的 /data)
dir /data
# 日志级别和日志文件路径
loglevel notice
logfile /logs/redis.log
# 设置最大内存限制(例如限制为 1GB,防止吃满宿主机内存)
maxmemory 1gb
# 达到最大内存后的淘汰策略(推荐 allkeys-lru)
maxmemory-policy allkeys-lru4.2 编写 docker-compose.yml
回到主目录 /opt/docker/redis,创建 docker-compose.yml 文件:
version: '3.8'
services:
redis:
image: redis:7.2-alpine
container_name: redis-server
restart: always
ports:
- "6379:6379"
volumes:
# 映射配置文件
- ./conf/redis.conf:/etc/redis/redis.conf
# 映射数据目录
- ./data:/data
# 映射日志目录
- ./logs:/logs
# 指定启动时加载自定义配置文件
command: ["redis-server", "/etc/redis/redis.conf"]
# 设置时区,与宿主机保持一致
environment:
- TZ=Asia/Shanghai
# 限制容器可以使用的资源 (可选)
deploy:
resources:
limits:
memory: 2G经验总结 :这里推荐使用了 alpine 版本的 Redis 镜像(如 redis:7.2-alpine),它的体积非常小,包含的系统漏洞层面也更少,是生产环境的极佳选择。
5. 服务启动与验证
5.1 启动服务
进入 /opt/docker/redis 目录下,一条命令将服务放入后台启动:
docker compose up -d查看容器的运行状态:
docker compose ps如果 STATUS 显示为 Up,说明容器已成功运行。
5.2 验证服务与功能
我们需要验证几个关键点:进程是否正常、密码是否生效、挂载文件是否有数据。
验证连接与密码:
使用 docker exec 进入容器内部使用 redis-cli 测试:
docker exec -it redis-server redis-cli -a YourStrongPassword123!如果出现 Warning 是正常现象(提示密码在命令行不安全),进入交互界面后输入:
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set mykey "hello docker"
OK
127.0.0.1:6379> get mykey
"hello docker"验证持久化是否生效:
退出 Redis 内部交互界面,回到宿主机查看我们刚才挂载的 data 目录:
ls -l ./data如果你能看到 appendonly.aof 或 dump.rdb 等文件或文件夹,说明数据持久化已经成功运作,即使重启或重建容器,刚才 set 的数据也不会丢失。
6. 常见问题排查(避坑指南)
1. 容器不断重启,看日志报 Permission denied
现象:
Redis无法向挂载的data或logs目录写数据。原因:宿主机的目录权限不足,或者
Linux的SELinux做了拦截。解决:赋予目录相应的权限
chmod -R 777 ./data ./logs,如果开启了 SELinux,在docker-compose的volumes挂载路径后加上 :z,如- ./data:/data:z。
2. 宿主机连接不上 6379 端口
排查路径:首先检查云服务器的安全组规则是否放行了 6379 端口;其次检查宿主机系统的防火墙(ufw / firewalld);最后检查配置文件中 bind 是否写死成了
127.0.0.1,必须为0.0.0.0才能对外提供访问。
7. 结语
使用 Docker Compose 部署 Redis 的最大好处在于 一切皆代码 (Infrastructure as Code)。当我们把 docker-compose.yml 和 redis.conf 提交到 Git 仓库后,无论是在新环境复刻,还是与团队共享,都只需要敲下 docker compose up -d 即可。
希望通过本文的拆解,不仅能够帮你在这个瞬间跑通 Redis 的部署,更希望这种将 配置、数据、日志分离挂载 的实践思路能对你有所启发。