docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署Redis密码访问+数据持久化

Docker部署Redis实现密码访问+数据持久化(服务器版)

作者:Goya!

本文主要介绍了Docker部署Redis实现密码访问+数据持久化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天是Docker部署系列的第二篇文章:用Docker部署Redis。

Redis是开发中最常用的缓存数据库,搭配上一期的MySQL,基本就能满足大部分项目的需求了。

本篇要点:

一、准备工作

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

目录说明:

三、准备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

配置说明:

保存退出(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.添加入方向规则:

安全建议:生产环境不要直接开放给所有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)
可能原因:

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为什么这么快!

十、总结

通过本文,我们成功在服务器上实现了:

现在你的Redis已经跑起来了,可以作为缓存、计数器、session存储等使用!

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

您可能感兴趣的文章:
阅读全文