step1 : 从docker中pull redis镜像
[root@pp ~]# docker pull redis:latest
mylatest: Pulling from library/redis
Digest: sha256:9a1a2bb9fd2bd8b2c15aaca44d8e6ba8bc448df9b7b8d7d24ba4b472e0da1b8a
Status: Image is up to date for redis:latest
docker.io/library/redis:latest
step2:下载redis.conf
[root@pp /]# mkdir -p /opt/docker-volume/redis
[root@pp /]# cd /opt/docker-volume/redis/
[root@pp redis]# wget http://download.redis.io/redis-stable/redis.conf
--2021-03-08 16:32:38-- http://download.redis.io/redis-stable/redis.conf
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 92222 (90K) [application/octet-stream]
Saving to: ‘redis.conf’
100%[====================================================================================================================================================================================================>] 92,222 183KB/s in 0.5s
2021-03-08 16:32:40 (183 KB/s) - ‘redis.conf’ saved [92222/92222]
step3:假设我们一主两从 我们需要有三个redis.conf文件 。分别命名为:redis-master.conf 、redis-slave6380.conf 、redis-slave6381.conf
首先我们配置redis-master.conf (只讲特殊配置,其他配置默认即可)
#bind 127.0.0.1 -::1 要把本机绑定ip的配置项注释掉
#默认端口
port 6379
#表示开启后台进程启动 一般都是开启的
daemonize yes
#redis主节点口令 一般集群模式下都会配置
requirepass xpp123
#表示开启aof
appendonly yes
appendfsync everysec
接着我们配置redis-slave6380.conf
#bind 127.0.0.1 -::1 要把本机绑定ip的配置项注释掉
#默认端口
port 6380
#表示开启后台进程启动 一般都是开启的
daemonize yes
#redis6380从节点口令 一般集群模式下都会配置
requirepass xpp1234
#表示开启aof
appendonly yes
appendfsync everysec
#配置主从关系
slaveof xx.xx.xx.xx 6379
#master的口令
masterauth xpp123
redis-slave6381.conf
#bind 127.0.0.1 -::1 要把本机绑定ip的配置项注释掉
#默认端口
port 6381
#表示开启后台进程启动 一般都是开启的
daemonize yes
#redis6380从节点口令 一般集群模式下都会配置
requirepass xpp1234
#表示开启aof
appendonly yes
appendfsync everysec
#配置主从关系
slaveof xx.xx.xx.xx 6379
#master的口令
masterauth xpp123
step4 启动集群
[root@pp redis_docker]# docker run -it --name redis-master -v /usr/local/redis_docker/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 redis bin/bash
3f6eee03630e15783e00e9a804904c99d2863dcc78a391176310de7793acc5d6
[root@pp redis_docker]# docker run -it --name redis-slave -v /usr/local/redis_docker/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 redis bin/bash
565cd4921da09cb7c4ec4606e3e1ebf2460b1a3d7a471e4f2834e2588f7d724b
step验证
下面我们进入docker容器,验证redis主从服务可用性。我们先启动两个容器 redis-slave-6380和redis-master-67379
docker ps 查看到两个容器状态为已启动
[root@pp /]# docker run -it --name redis-master-6379 -v /usr/local/redis_docker/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 redis /bin/bash
6b47084f428625fbed7b7dfb1194cd951c7b8b870ed20846afd4aca0acbe7a44
[root@pp /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b47084f4286 redis "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:6379->6379/tcp redis-master-6379
[root@pp /]# docker run -it --name redis-slave-6380 -v /usr/local/redis_docker/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 redis /bin/bash
1d5d6cb871915551bed84c17d67fd398e2470d5aeb5585c555e62a6d3e7a1402
[root@pp /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d5d6cb87191 redis "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 0.0.0.0:6380->6379/tcp redis-slave-6380
6b47084f4286 redis "docker-entrypoint.s…" 50 seconds ago Up 50 seconds 0.0.0.0:6379->6379/tcp redis-master-6379
[root@pp /]#
打开两个窗口 master 和 slave 看看redis服务是否完好
[root@pp /]# docker exec -it redis-master-6379 bash
root@6b47084f4286:/data# redis-server /usr/local/etc/redis/redis.conf
root@6b47084f4286:/data# redis-cli -a xpp123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379>
[root@pp ~]# docker exec -it redis-slave-6380 bash
root@1d5d6cb87191:/data# redis-server /usr/local/etc/redis/redis.conf
root@1d5d6cb87191:/data# redis-cli -a xpp1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379>
看到master节点写入地方k1能在slave节点读取出来 。ok 大功告成。