一、使用Dockerfile创建自己想要的redis版本
FROM centos
MAINTAINER wang
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN echo y | yum -y install gcc automake autoconf libtool make && echo y | yum -y install gcc-c++ && echo y | yum -y install diffutils
ADD redis-6.2.6.tar.gz /usr/local
COPY readme.txt /usr/local
CMD /bin/sh
RUN cd /usr/local/redis-6.2.6/src && make && make install
创建完成Dockerfile后,使用docker build创建images。其中.代表当前Dockerfile所在的文件目录,ADD命令的全目录是./redis-6.2.6.tar.gz,即Dockerfile目录下的文件。
docker build -t redis .
二:创建redis配置文件:(配置文件不全,勿用于公司)
#!/bin/bash
for port in 6379 6380 6381 6389 6390 6391
do
mkdir -p /data-redis/node-$port/conf
cat << EOF >> /data-redis/node-$port/conf/redis.conf
pidfile "/var/run/redis_$port.pid"
port $port
dbfilename "dump_$port.rdb"
logfile "$port.log"
#关闭ip绑定,不然外网无法访问!
#bind=127.0.0.1
#关闭保护模式
protected-mode no
######打开集群模式#######
cluster-enabled yes
cluster-config-file node-$port.conf
#主机宕机多少秒后采用从机
cluster-node-timeout 15000
EOF
done
其中: cat << EOF >> /data-redis/node-$port/conf/redis.conf 表示用EOF创建零时文件并使用cat查看(先执行cat << EOF),然后以(>>)追加(若想要覆盖则使用>),形式输入到/data-redis/node-$port/conf/redis.conf文件中。
最后一个EOF其前后千万不要手欠创建空格,会报错的!
三、创建docker网络
创建redis使用的专用网段及网关:
docker network create --driver bridge --subnet 192.171.0.0/16 --gateway 192.171.0.1 redis-net
四、使用shell脚本启动docker的redis镜像
#!/bin/bash
for port in 6379 6380 6381 6389 6390 6391
do
docker run -it -d -p $port:$port -p 1$port:1$port --name redis-$port -v /data-redis/node-$port/conf/redis.conf:/usr/local/redis-6.2.6/redis.conf --net redis-net redis redis-server /usr/local/redis-6.2.6/redis.conf
done
只挂载了配置文件,redis的数据库没有挂载。可以进入docker容器内检查redis是否启动成功,成功redis-server *:6379 [cluster]
五、redis集群合体
进入docker的redis一个容器内,使用以下命令让redis集群合体:
redis-cli --cluster create --cluster-replicas 1 192.168.0.2:6379 192.168.0.3:6380 192.168.0.4:6381 192.168.0.5:6389 192.168.0.6:6390 192.168.0.7:6391
合体前请使用docker network inspect redis-net检查ip地址是否与上述端口对应!
六、在windows系统中添加路由
route add 192.171.0.0 mask 255.255.0.0 192.168.159.130
添加路由后即可从windows访问到了虚拟机linux的docker的redis容器。其中子网192.171.0.0和掩码必须与容器使用的子网掩码相同,192.168.159.130为linux的ip地址。其实就是做了一个路由,以linux的IP地址为网关。
不添加路由也可访问,但是访问延迟较高,时间=258ms。
具体以下链接自行查看: