在docker中使用redis


准备

安装目标:

启动两个redis,并开启密码保护、rdb持久化,数据和配置文件存放在宿主机。

选择一个适合的版本:

在docker-hub中选择

# 此处选用6.2.1-alpine
docker pull redis:6.2.1-alpine

安装

准备存放持久化文件、配置文件的宿主机目录

mkdir -p /data/redis/{a,b}/conf 
mkdir -p /data/redis/{a,b}/data 

编写配置文件redis.conf,并放入对应的宿主机目录内

#bind 127.0.0.1
daemonize no
requirepass  123456 
appendonly no 
tcp-keepalive 300 

# 说明
#bind 127.0.0.1 				#注释掉这部分,使redis可以外部访问
daemonize no 						#不需要使用守护线程的方式启动,交给docker来负责即可
requirepass  123456   	#给redis设置密码
appendonly no  					#aof持久化,按需修改即可
tcp-keepalive 300 			#防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

注:

  • 要获取完整的默认配置文件,可以在官网下载解压后,查询redis.conf文件
  • 密码按需修改,或者注释掉该行(即不用密码访问)
  • 持久化配置额外配置参考文档

启动redis

docker run \
--name redis-a \
-d \
--restart=always \
-p 6379:6379 \
-v /data/redis/a/conf/redis.conf:/etc/redis/redis.conf \
-v /data/redis/a/data:/data \
--sysctl net.core.somaxconn=511 \
redis:6.2.1-alpine redis-server /etc/redis/redis.conf

查看是否启动成功

docker ps
docker logs redis-a

启动成功后,可以通过一些工具访问此redis,如果启动过程中有Warning和Error,则可根据提示解决。此处列出两个警告及其解决方法。

排错

  1. 启动日志有警告:
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

解决:

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1
  1. 启动日志有警告:
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

解决:

echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p

并且在docker run命令启动时,添加
--sysctl net.core.somaxconn=511 \
即可

redis持久化

Redis提供了不同范围的持久性选项:

  • RDB(Redis数据库):RDB持久性按指定的时间间隔执行数据集的时间点快照。

  • AOF(仅附加文件):AOF持久性记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数据集。使用与Redis协议本身相同的格式记录命令,并且采用仅追加方式。当日志太大时,Redis可以在后台重写日志。

  • 无持久性:如果希望,只要服务器正在运行,数据就一直存在,则可以完全禁用持久性。

  • RDB + AOF:可以在同一实例中同时合并AOF和RDB。请注意,在这种情况下,当Redis重新启动时,AOF文件将用于重建原始数据集,因为它可以保证是最完整的。

要理解的最重要的事情是RDB与AOF持久性之间的不同权衡

详见:redis持久化文档

docker run

docker run 命令参数:

  • -p 将容器端口映射到宿主机端口,格式为:宿主机端口:容器端口
  • -v 将宿主机目录挂在到容器内,格式为:宿主机目录:容器目录

文章作者: lcok
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lcok !
打赏
  目录