首先从 docker hub 拉取 Redis 镜像,这里拉取 7.0 版。
docker pull redis:7.0
首先要在宿主机/root 目录中创建一个目录 redis,将来用于存放外挂文件 redis.conf。
mkdir redis
使用rz命令上传一份redis.conf:
rz
修改配置文件:
vim redis.conf
1.解除 IP 绑定
将 bind 行注释掉,以解除 Redis 对访问者 IP 的绑定。
3.指定持久化目录
这里要指定 RDB 或 AOF 的持久化目录为/data,这样无论是哪种持久化文件,均会保存
到该目录。后面会指定容器中的/data 目录为数据卷挂载点目录。
docker run --name myredis \
-v /root/redis/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-dp 6379:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf
这里指定了两个数据卷,其中一个是文件,一个是目录:
查看运行的docker的镜像:
docker ps -a
通过 docker exec 命令进入 Redis 容器后,就可通过 redis-cli 客户端连接上这个 Redis,然后执行 Redis 命令了。
docker exec -it myredis /bin/bash
redis-cli
到此为止,单机版的redis搞定啦!!!!
现要搭建一个“一主两从”的 Redis 集群。这三个容器的端口号都保持默认,但对外暴露出的端口号分别为 6381、6382、6383。其中,6381 的为 master,另外两个为 slave。
现仍在前面的/root/redis 目录中完成配置。复制 redis.conf 并重命名为 redis1.conf,并在文件最后添加如下配置,以对外宣布当前 redis 的 IP 与端口。注意,该 IP 为 docker 宿主机的 IP,端口号为当前 redis 对外暴露的端口号。
复制 redis.conf 并重命名为 redis1.conf
cp redis.conf redis1.conf
修改redis1.conf
vim redis1.conf
最后加上两句语句如下:
slave-announce-ip 192.168.162.105
slave-announce-port 6381
同理redis2.conf redis3.conf 如下:
slave-announce-ip 192.168.162.105
slave-announce-port 6382
slave-announce-ip 192.168.162.105
slave-announce-port 6383
首先启动 master,即启动 myredis-1 容器。
docker run --name myredis-1 \
-v /root/redis/redis1.conf:/etc/redis/redis.conf \
-v /root/redis/data/6381:/data \
-dp 6381:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf
在启动 slave 的命令中需要指出其 slaveof 于谁。
启动myredis-2:
docker run --name myredis-2 \
-v /root/redis/redis2.conf:/etc/redis/redis.conf \
-v /root/redis/data/6382:/data \
-dp 6382:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf --slaveof 192.168.162.105 6381
启动myredis-3:
docker run --name myredis-3 \
-v /root/redis/redis3.conf:/etc/redis/redis.conf \
-v /root/redis/data/6383:/data \
-dp 6383:6379 \
redis:7.0 \
redis-server /etc/redis/redis.conf --slaveof 192.168.162.105 6381
查看这三个容器节点的 info replication,可以看到它们间的主从关系已经建立。
docker exec -it myredis-1 redis-cli info replication
docker exec -it myredis-2 redis-cli info replication
docker exec -it myredis-3 redis-cli info replication
在 master 节点 myredis-1 中写入数据。
docker exec -it myredis-1 /bin/bash
redis-cli
set name tigerhhzz11
set name tigerhhzz11