一、安装docker

1、查看linux内核版本

uname -a

docker 要求centos7在版本3.10之上,内核版本过低的百度一下,自己去更新

2、安装必要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置yum源

yum-config-manager --add-repo 

4、查看docker版本

yum list docker-ce --showduplicates | sort -r

5、选择你喜爱的版本下载安装

 yum install docker-ce-17.12.1.ce

6、 启动,并加入开机启动

systemctl start docker
systemctl start docker

7、查看版本

docker version 

到此docker 安装成功。

二、本文用到的一些docker基础命令

1、docker images :查看已下载的docker镜像

2、docker ps [options] :

  • -a :显示所有的容器,包括未运行的。

  • -f :根据条件过滤显示的内容。

  • --format :指定返回值的模板文件。

  • -l :显示最近创建的容器。

  • -n :列出最近创建的n个容器。

  • --no-trunc :不截断输出。

  • -q :静默模式,只显示容器编号。

  • -s :显示总的文件大小。

3、docker search [options] term :

  • --automated :只列出 automated build类型的镜像;

  • --no-trunc :显示完整的镜像描述;

  • -s :列出收藏数不小于指定值的镜像。

4、docker pull [options] name [:tag|@digest] :

  • -a :拉取所有 tagged 镜像

  • --disable-content-trust :忽略镜像的校验,默认开启

5、docker build [options] path| url| -

  • --build-arg=[] :设置镜像创建时的变量;

  • --cpu-shares :设置 cpu 使用权重;

  • --cpu-period :限制 CPU CFS周期;

  • --cpu-quota :限制 CPU CFS配额;

  • --cpuset-cpus :指定使用的CPU id;

  • --cpuset-mems :指定使用的内存 id;

  • --disable-content-trust :忽略校验,默认开启;

  • -f :指定要使用的Dockerfile路径;

  • --force-rm :设置镜像过程中删除中间容器;

  • --isolation :使用容器隔离技术;

  • --label=[] :设置镜像使用的元数据;

  • -m :设置内存最大值;

  • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像 ID;

  • --rm :设置镜像成功后删除中间容器;

  • --shm-size :设置/dev/shm的大小,默认值是64M;

  • --ulimit :Ulimit配置。

  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network: 默认 default。在构建期间设置RUN指令的网络模式

三、下载redis4.0

docker pull redis:4.0

四、下载ruby

docker pull ruby

五、创建虚拟网卡

docker network create redis-net

六、查看redis-net虚拟网卡网关ip

docker network inspect redis-net | grep "Gateway" | grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o

网卡网关ip是:172.18.0.1

七、创建redis配置文件(redis-cluster.tmpl)

mkdir -p  /home/redis-cluster && cd /home/redis-cluster
vim redis-cluster.tmpl
port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip xxx.xxx.xxx.xx #暂时是你上面查到的网关ip值
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
protected-mode no

八、生成conf 和 data 文件目录

for port in `seq 7000 7005`; do \mkdir -p ./${port}/conf \&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis${port}.conf \&& mkdir -p ./${port}/data; \
done

这样在你的/home/redis-cluster 下便有 7000~7005 总共六个文件夹

使用tree命令查询 应该为:

请忽略data目录下的文件

九、启动redis容器

docker run -p 7000:7000 -p 17000:17000 --restart always --name redis-7000 --net redis-net --privileged=true -v /home/redis-cluster/7000/redis7000.conf:/etc/redis/redis.conf -v /home/redis-cluster/7000/data:/data -d redis:4.0 redis-server /etc/redis/redis.confdocker run -p 7001:7001 -p 17001:17001 --restart always --name redis-7001 --net redis-net --privileged=true -v /home/redis-cluster/7001/redis7001.conf:/etc/redis/redis.conf -v /home/redis-cluster/7001/data:/data -d redis:4.0 redis-server /etc/redis/redis.confdocker run -p 7002:7002 -p 17002:17002 --restart always --name redis-7002 --net redis-net --privileged=true -v /home/redis-cluster/7002/redis7002.conf:/etc/redis/redis.conf -v /home/redis-cluster/7002/data:/data -d redis:4.0 redis-server /etc/redis/redis.confdocker run -p 7003:7003 -p 17003:17003 --restart always --name redis-7003 --net redis-net --privileged=true -v /home/redis-cluster/7003/redis7003.conf:/etc/redis/redis.conf -v /home/redis-cluster/7003/data:/data -d redis:4.0 redis-server /etc/redis/redis.confdocker run -p 7004:7004 -p 17004:17004 --restart always --name redis-7004 --net redis-net --privileged=true -v /home/redis-cluster/7004/redis7004.conf:/etc/redis/redis.conf -v /home/redis-cluster/7004/data:/data -d redis:4.0 redis-server /etc/redis/redis.confdocker run -p 7005:7005 -p 17005:17005 --restart always --name redis-7005 --net redis-net --privileged=true -v /home/redis-cluster/7005/redis7005.conf:/etc/redis/redis.conf -v /home/redis-cluster/7005/data:/data -d redis:4.0 redis-server /etc/redis/redis.conf

十、查看容器ip分配

docker network inspect redis-net

将 Containers 中的端口对应ip同步替换到你所生成的 conf文件当中。

十一、停止并删除全部容器

sudo docker stop $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q) 

十二、创建ruby镜像

写Dockerfile文件,切记文件名为Dockerfile

FROM ruby:latest
MAINTAINER sunlin<sunlin1111@163.com>
RUN gem install redis -v 4.0.0
RUN mkdir /redis
WORKDIR /redis
ADD ./redis-trib.rb /redis/redis-trib.rb

这里分享一个貌似有点坑的小坑

由于当前(2020/01/02)redis最新版本已在5.0之上。redis5.0已经不采用ruby的方式配置集群。

所以这里下载redis 要指定版本。否则就会下载最新版的redis-trib.rb,然后会疯狂提示你:

WARNING: redis-trib.rb is not longer available!
You should use redis-cli ins.....
...
......等等

十三、运行生成ruby自定义镜像

docker build -t redis-trib .

十四、运行ruby

docker run -i --rm --net redis-net redis-trib ruby redis-trib.rb create --replicas 1 172.18.0.2:7000 172.18.0.3:7001 172.18.0.4:7002 172.18.0.5:7003 172.18.0.6:7004 172.18.0.7:7005

中间会弹出确认框:

一定要输入 yes 是yes,不是y!不是y!不是y!!!

输入y会在接下来的某一步操作中报错:

(error) CLUSTERDOWN Hash slot not served

十五、检验下集群是否正常运行

docker exec -it redis-7000 /bin/sh
redis-cli -p 7000 -c
set sunl test1 

搭建过程中可能遇到的问题:

一、集群部署一直卡在Waiting for the cluster to join ......

解决办法:

1、检查redis${port}.conf文件

#检查
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
#port是否与当前端口一致

若不一致则修改conf文件,然后执行:

#1、删除redis${port} 所在上级目录的同级目录data下的全部文件
rm -rf appendonly.aof dump.rdb nodes.conf
#2、分别进入每个redis容器
docker exec -it redis-port /bin/sh # port 不是命令 是你容器的端口 redis-port 是你容器的名字
#3、登录redis
redis-cli -p port -c
#4、清除数据
flushdb
#5、退出redis
exit
#6、退出容器
exit
#7、重新启动当前全部容器
sudo docker restart $(sudo docker ps -a -q) 

二、[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some

#1、删除redis${port} 所在上级目录的同级目录data下的全部文件
rm -rf appendonly.aof dump.rdb nodes.conf
#2、分别进入每个redis容器
docker exec -it redis-port /bin/sh # port 不是命令 是你容器的端口 redis-port 是你容器的名字
#3、登录redis
redis-cli -p port -c
#4、清除数据
flushdb
#5、退出redis
exit
#6、退出容器
exit
#7、重新启动当前全部容器
sudo docker restart $(sudo docker ps -a -q) 

三、Creating Server TCP listening socket ****:6379: bind: Cannot assign requested address

解决办法:删除conf文件中的bind

文章参考:https://www.jianshu.com/p/a147ba796bc5

https://blog.csdn.net/qq_35470030/article/details/90042597

基于docker的redis4.0单机集群搭建相关推荐

  1. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  2. Windows家庭版下基于Docker的hadoop、Spark集群搭建

    Windows家庭版下基于Docker的hadoop.Spark集群搭建 目录 Windows家庭版下基于Docker的hadoop.Spark集群搭建 1.实验目的 2.实验平台 3.实验内容和要求 ...

  3. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  4. 基于 Docker 的 Redis 高可用集群搭建(redis-sentinel)

    前言   之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的. ...

  5. redis4.0.2集群搭建

    https://www.jianshu.com/p/2735b6a538af#redis.conf-%E9%85%8D%E7%BD%AE 搭集群还是比较有成就感的,一边忙工作,一边搭,克服了公司内网下 ...

  6. Docker Swarm 初步认识 及 集群搭建

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  7. 基于slurm框架的GPU服务器集群搭建方法

    基于slurm框架的GPU服务器集群搭建操作文档 1. 环境基础 2. 环境配置 2.1 hostname配置 2.2 关闭SELinux (master, slave) 2.3 关闭Firewall ...

  8. Redis基于Linux系统的安装与集群搭建

    最近项目里需要引入Redis,这里记录下Redis的安装.这里以centos7为例,首先我们需要确保防火墙关闭 systemctl status firewalld.service //查看防火墙状态 ...

  9. MongoDB单机集群搭建

    一.单机副本集部署方案: 单台物理机,一个主节点,一个副本节点,一个仲裁节点. 二.部署步骤 1.在mongodb目录下新建config目录(目录及位置可随意指定,在此按照config目录搭建),在c ...

  10. elasticsearch7.0.1集群搭建(最后有ES6.7的配置)

    ** ES集群搭建 **: 说明:首先要讨论搭建几个集群,集群搭建很简单,只需要配置做好就ok; 一 : 在搭建集群之前,我们首先要了解一个es中的相关内容 cluster : 代表一个集群,集群中有 ...

最新文章

  1. Graph Search图谱搜索
  2. EventBank闪耀企业服务 荣获“2017中国企业服务云年度产品”奖
  3. CSS核心技术详解-核心概念
  4. 【安全牛学习笔记】kali TOP10 安全工具:
  5. Jquery中$(document).ready(function(){ })函数的使用详解
  6. 内核抢占会让内核调度更好吗?
  7. Redis 与 hash (哈希)相关的常用命令
  8. MySQL新建存储过程出现:ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 20, found 16. Create
  9. HDFS如何检测并删除多余副本块
  10. 计算机网络--基站 NFC 蓝牙 RFID ETC 云计算 云桌面
  11. 3.5 数值分析: 例题及迭代法收敛的充分条件
  12. 广东将5G基站专项规划纳入各地国土空间规划
  13. python plot画图函数_详解pandas.DataFrame.plot() 画图函数
  14. 什么是软件项目验收,软件项目验收测试方法分享
  15. node-red与西门子PLC通信
  16. idea全局搜索文件
  17. C# 数组内元素合并转换成以指定字符连接的字符串
  18. IDL学习:语法基础-字符串
  19. Android,JCVideoPlayerStandard,节操,视频播放
  20. SQL语句中except是怎样用的?

热门文章

  1. 遇到一个诡异的regedit.exe程序问题
  2. Adobe Premiere基础-编辑素材文件常规操作(脱机文件,替换素材,素材标签和编组,素材启用,便捷调节不透明度,项目打包)(十七)
  3. iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
  4. 在Linux Mint 19.2 XFCE(x64)中安装Canon LBP2900+打印机驱动程序
  5. LOGO特训营 第一节 鉴别Logo与Logo设计思路
  6. 河北大学计算机系院长,徐建民(河北大学网络空间安全与计算机学院教授)_百度百科...
  7. [量化-038]python代码-根据roe估算公司的pb值
  8. ibm服务器阵列卡与型号,IBM阵列卡介绍和服务器对阵列卡的支持情况
  9. Python 数据科学入门教程:Pandas
  10. R语言之决策树CART、C4.5算法