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存储等使用!
到此这篇关于Docker部署Redis实现密码访问+数据持久化(服务器版)的文章就介绍到这了,更多相关Docker部署Redis密码访问+数据持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
