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
docker images
Step2 基于宿主机,创建配置文件、存储目录
- 创建数据配置与存储目录
mkdir -p /data/redis
ls -la /data
- 下载redis配置文件
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_memory
为0
# 永久修改 (需重启)
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
: 后台启动redisredis-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 系列教程
- 其他
标签:--,redis,Redis,conf,Docker,data,docker From: https://www.cnblogs.com/johnnyzen/p/18078256