[redis] 基于Docker安装Redis

0 序

  • 环境信息
  • OS : CENTOS 7.9
  • Docker : 25.0.4
  • Redis : 7.2.4

7.2.4 版本比较新, 也可尝试 6.0.8 等版本

1 安装步骤

Step0 安装 docker

略。可参见:

Step1 下载镜像

docker search redis

docker pull redis:7.2.4

https://hub-stage.docker.com/_/redis/tags?page=2

docker images

Step2 基于宿主机,创建配置文件、存储目录

  • 创建数据配置与存储目录
mkdir -p /data/redis

ls -la /data
  • 下载redis配置文件

http://download.redis.io/redis-stable

cd /data/redis

wget http://download.redis.io/redis-stable/redis.conf

ls -la /data/redis


  • 修改REDIS配置文件的配置项(redis.conf)

vi /data/redis/redis.conf

# bind 127.0.0.1 # 注释掉这部分,这是限制redis只能本地访问
# bind 127.0.0.1 -::1

protected-mode yes # 默认 yes,开启保护模式,限制为本地访问

daemonize no # 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
# daemonize no # 【强制建议】 将 daemonize yes 注释起来或 daemonize no设置,因为该配置和docker run中 -d 参数冲突,会导致容器一直启动失败

databases 16 # 数据库个数(可选)

dir  ./ # 输入本地redis数据库存放文件夹,默认即 ./(可选)

appendonly yes # redis持久化,默认:no(可选)

logfile "redis.log" # 日志文件,默认 ""。 "redis.log" 对应的物理存储目录: /data/redis/data/redis.log | Specify the log file name. Also the empty string can be used to force . Redis to log on the standard output. Note that if you use standard output for logging but daemonize, logs will be sent to /dev/null

requirepass 123456 # 设置成你自己的密码。默认配置如下:
# requirepass foobared
  • protected-mode 是在没有显示定义 bind 地址(即监听全网段),又没有设置密码 requirepass 时,protected-mode 只允许本地回环 127.0.0.1 访问。 也就是说当开启了 protected-mode 时,如果你既没有显示的定义了 bind 监听的地址,同时又没有设置 auth 密码。那你只能通过 127.0.0.1 来访问 redis 服务。
  • 配置OS系统内核参数配置(sysctl.conf)

为避免创建redis容器失败,在/data/redis/data/redis.log中报错"WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. 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."(必须启用内存复用!没有它,在内存不足的情况下,后台保存或复制可能会失败。如果被禁用,它也可能导致故障,但不会造成低内存条件,请参阅https://github.com/jemalloc/jemalloc/issues/1328。要解决此问题,请添加“vm.overcommit_memory = 1'到/etc/sysctl.conf,然后重新启动或运行 sysctl vm.overcommit_memory = 1 才能生效。)
https://github.com/jemalloc/jemalloc/issues/1328

centos 7.9 默认 vm.overcommit_memory0

# 永久修改 (需重启)
echo " " >> /etc/sysctl.conf
echo "# fix for redis : https://github.com/jemalloc/jemalloc/issues/1328" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

# 临修改 (无需重启)
sysctl -w vm.overcommit_memory=1

# 查看修改效果
sysctl -a | grep -i vm.overcommit_memory

Step2 创建、启动镜像

docker run \
--restart always \
-p 16379:6379 --name redis \
--privileged=true \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data:rw \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes
  • -p 16379:6379 : 第1个 16379 端口:是指宿主机的映射端口 ; 第2个 6379 端口:是指容器的被映射端口
  • -d redis : 后台启动redis
  • redis-server /etc/redis/redis.conf : 以配置文件启动redis,加载容器内的conf文件。docker 镜像 redis 默认 无配置文件启动。
  • --appendonly yes : 开启 redis 持久化
  • --requirepass "123456" : 设置认证密码 【此处没选择这种方式】

Step3 查看运行状态

  • 查看进程运行状态
# 查看活跃的容器
docker ps

# 如果没有 redis 说明启动失败 查看错误日志
docker logs redis
或 tailf /data/redis/data/redis.log

# 查看 redis 的端口映射
docker port redis

# 查看 redis 的 ip 挂载 端口映射等信息
docker inspect redis

docker inspect redis

  • 查看数据目录
ls -la /data/redis/data/

Step4 测验:访问/使用 redis

# 基于 redis-cli 访问
docker run -it --link redis:redis --rm redis redis-cli -h redis -p 6379
> AUTH {密码}
或
docker run -it --link redis:redis --rm redis redis-cli -h redis -p 6379 -a {密码}
  • -it 交互的虚拟终端
  • --rm 退出是删除此容器


或使用 shell 登录容器内操作

docker exec -it redis bash
> redis-cli

Step5 扩展/可选:主从配置

注:本步骤,未亲测

  • 新建一个redis-slave容器(同新建redis)
docker run \
--restart always \
-p 16380:6380 --name redis-salve \
--privileged=true \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data:rw \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes

查看 redis master 的内部IP : (下图来源于网友)

修改 redis-slave 的配置文件
# 主地址
replicaof 172.17.0.2 6379

# 主认证
masterauth hubocheng
  • 重启redis-slave
docker restart redis-slave
  • 登录 redis master 使用 info 命令查看从机的状态

如果配置不成功记得检查 redis master 的 bind 和 protected-mode 的设置,看下有没有监听内网地址,否则 redis-slave 没办法通过 redis master 的地址做数据同步

  • 登陆redis master后使用info,显示主从关联成功

2 卸载步骤

docker rm -f redis
docker ps -a | grep -i redi

X 参考与推荐文献

  • redis 官方
  • redis 系列教程
  • 其他
posted @ 2024-03-17 11:39  千千寰宇  阅读(591)  评论(0编辑  收藏  举报