【保姆级教程】Docker部署Redis,支持密码访问+数据持久化(服务器版)
大家好,我是Goya!
今天是Docker部署系列的第二篇文章:用Docker部署Redis。
Redis是开发中最常用的缓存数据库,搭配上一期的MySQL,基本就能满足大部分项目的需求了。
本篇要点:
-
✅ 一分钟启动Redis
-
✅ 设置访问密码
-
✅ 数据持久化(防止重启丢数据)
-
✅ 配置文件自定义
-
✅ 远程客户端连接测试
一、准备工作
1.1 检查Docker环境
首先确认服务器上已经安装了Docker:
docker --version
能看到版本号即可。如果没有安装,请参考官方文档安装Docker。
1.2 拉取Redis镜像
我们选择最新的稳定版Redis 7:
docker pull redis:7
查看镜像是否拉取成功:
docker images | grep redis
二、创建挂载目录
在宿主机上创建目录,存放Redis的数据和配置:
# 创建数据目录和配置目录
mkdir -p ~/docker/redis/data
mkdir -p ~/docker/redis/config
目录说明:
- ~/docker/redis/data:存放RDB/AOF持久化文件
- ~/docker/redis/config:存放redis.conf配置文件
三、准备Redis配置文件
3.1 下载官方配置文件模板
# 从官方GitHub下载最新配置文件
curl -o ~/docker/redis/config/redis.conf https://raw.githubusercontent.com/redis/redis/7.0/redis.conf
3.2 修改配置文件
下载完成后,用vim编辑配置文件:
vim ~/docker/redis/config/redis.conf
需要修改或确认以下关键配置:
# 绑定所有网卡(允许远程连接)
bind 0.0.0.0
# 保护模式(开启密码后可以关闭)
protected-mode no
# 端口号
port 6379
# 设置密码(重要!生产环境必须设置)
requirepass 123456
# 持久化配置
# RDB持久化(每隔60秒如果至少有1个key变化,就生成快照)
save 60 1
# 持久化文件名
dbfilename dump.rdb
# 持久化文件目录
dir /data
# AOF持久化(追加日志,更安全但文件更大)
appendonly yes
appendfilename "appendonly.aof"
# 每秒钟同步一次
appendfsync everysec
# 最大内存限制(根据实际情况调整)
maxmemory 256mb
# 内存淘汰策略(volatile-lru:从已设置过期时间的key中淘汰最近最少使用的)
maxmemory-policy volatile-lru
配置说明:
-
requirepass:访问密码,一定要设置
-
save 60 1:60秒内有1个key变化就持久化
-
appendonly yes:开启AOF持久化
-
maxmemory:限制内存使用,防止Redis占满服务器内存
保存退出(vim操作:按ESC,输入:wq回车)。
四、运行Redis容器
4.1 使用配置文件启动
docker run -d \
--name redis7 \
-p 6379:6379 \
-v ~/docker/redis/data:/data \
-v ~/docker/redis/config/redis.conf:/usr/local/etc/redis/redis.conf \
--restart=always \
redis:7 \
redis-server /usr/local/etc/redis/redis.conf
4.2 验证容器是否启动
# 查看容器状态
docker ps
应该能看到redis7容器,状态是Up
4.3 查看容器日志
docker logs redis7
看到Ready to accept connections就说明启动成功了。
五、在服务器上验证Redis
5.1 进入容器连接Redis
# 直接连接Redis(一步到位)
docker exec -it redis7 redis-cli -a 123456
5.2 测试Redis命令
连接成功后,试试几个基本命令:
# 设置一个key
set name "docker redis"
# 获取key
get name
# 应该输出: "docker redis"
# 查看所有key
keys *
# 查看Redis信息
info server
能看到redis_version:7.x之类的信息,说明一切正常!
5.3 测试数据持久化
验证重启容器后数据是否还在:
# 先写入一些数据
set user:1 "张三"
set user:2 "李四"
set counter 100
# 退出Redis
exit
# 重启容器
docker restart redis7
# 再次连接查看数据
docker exec -it redis7 redis-cli -a 123456
# 查看之前写入的key
get user:1
# 应该还能看到"张三"
如果数据还在,说明持久化配置生效了!
六、配置服务器防火墙/安全组
6.1 检查防火墙类型
# 你的服务器输出显示没有firewall-cmd
# 说明用的是UFW(Ubuntu默认防火墙)或者没有开启防火墙
6.2 如果是UFW防火墙
# 查看防火墙状态
ufw status
# 开放6379端口
ufw allow 6379/tcp
# 重启防火墙
ufw reload
6.3 如果是云服务器(阿里云/腾讯云等)
需要在控制台的安全组中开放6379端口:
1.登录云服务商控制台
2.找到你的实例对应的安全组
3.添加入方向规则:
-
端口范围:6379
-
授权对象:0.0.0.0/0(允许所有IP,或指定你的本地IP)
-
协议:TCP
安全建议:生产环境不要直接开放给所有IP,建议只允许你的办公网络IP访问。
七、常用Redis命令和Docker操作
7.1 Docker操作Redis
# 停止容器
docker stop redis7
# 启动容器
docker start redis7
# 重启容器
docker restart redis7
# 查看实时日志
docker logs -f redis7
# 进入容器
docker exec -it redis7 bash
# 删除容器(数据还在,因为挂载到宿主机了)
docker rm -f redis7
8.2 Redis命令行常用操作
# 带密码登录
redis-cli -a 密码
# 选择数据库(默认0-15)
select 1
# 查看所有key
keys *
# 查看key类型
type key名
# 设置过期时间(秒)
expire key名 60
# 查看剩余时间
ttl key名
# 删除key
del key名
# 清空当前数据库
flushdb
# 清空所有数据库(慎用!)
flushall
八、常见问题排查
Q1:容器启动失败
# 查看错误日志
docker logs redis7
Q2:连接被拒绝(Connection refused)
可能原因:
-
Redis没启动:docker ps查看容器状态
-
端口没映射对:检查-p 6379:6379
-
防火墙没开:检查UFW/安全组配置
Q3:连接报错"NOAUTH Authentication required"
没有输入密码,或者密码错误:
# 登录时指定密码
redis-cli -a 你的密码
# 或者登录后认证
redis-cli
auth 你的密码
Q4:远程连接不上,但服务器本地可以
检查:
1.配置文件中的bind是否设置为0.0.0.0
2.防火墙是否开放了6379端口
3.云服务器安全组是否添加了规则
Q5:重启容器后数据丢了
检查持久化配置是否生效:
# 进入容器查看配置
docker exec -it redis7 redis-cli -a 123456
# 查看持久化配置
config get save
config get appendonly
如果appendonly是no,说明AOF没开。检查配置文件是否正确挂载。
九、性能测试(可选)
Redis自带了性能测试工具redis-benchmark:
# 进入容器
docker exec -it redis7 bash
# 运行性能测试(100个并发,10000个请求)
redis-benchmark -a 123456 -n 10000 -c 100
# 测试结果示例:
# SET: 45000 requests per second
# GET: 48000 requests per second
每秒几万次的读写,这就是Redis为什么这么快!
十、总结
通过本文,我们成功在服务器上实现了:
-
✅ Docker一键部署Redis 7
-
✅ 设置密码保护
-
✅ 配置RDB+AOF双重持久化
-
✅ 数据挂载到宿主机
-
✅ 服务器本地验证
-
✅ 配置防火墙/安全组支持远程连接
现在你的Redis已经跑起来了,可以作为缓存、计数器、session存储等使用!
如果本文对你有帮助,欢迎点赞、收藏、评论!
有问题随时在评论区留言,我看到就会回复。
更多推荐
所有评论(0)