架构图:

第一步:启动6台redis节点:
docker run -d --name redis-node-1 --net host --privileged=true \
-v /data/redis/share/redis-node-1:/data redis:6.0.8 \
--cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true \
-v /data/redis/share/redis-node-2:/data redis:6.0.8 \
--cluster-enabled yes --appendonly yes --port 6382
...
# 开上6台redis节点。
参数命令解释:

启动后的容器:

第二步:进入其中一个节点,构建主从关系。
# 进入redis节点
docker exec -it redis-node-1 /bin/bash
# 构建主从关系
redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1
--cluster-replicas 1 表示为每个master创建一个salve节点,就是1:1的主从比例。


第三步:进入某个节点查看redis集群状态。


到了这,一个3主3从的redis集群就算搭建成功!注意错误:


其实就是通过哈希槽分区算法,算出要插入的槽位,进而切换到槽位所在的节点而已。第四步:redis-cli --cluster check 127.0.0.1:6381
命令查看集群信息。

容错就是如果redis某个节点宕机了的情况。
主节点宕机,对应的从节点通过心跳检测,检测不到就会上位。


当宕机的节点恢复,就会变成对应的从机。

扩容就是添加节点的情况。
第一步:新建6387,6388两个redis节点。

第二步:将新增的6387节点作为master节点加入集群。
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
# 6387就是将要作为master新增节点。
# 6381就是原来集群节点里面的领路人,相当于找到组织加入集群。

第三步:虽然节点已经加入了集群,但没有槽位的。所以要重新分派槽号。
redis-cli --cluster reshard IP地址:端口号

执行reshard命令后,要填写一些配置:



第四步:槽号分派是从前面几个节点分出了一些槽号给新节点。


第五步:为主节点6387分配从节点6388。
# 从节点绑定
redis-cli --cluster add-node 从节点IP:从节点端口 主节点IP:主节点端口 --cluster-slave --cluster-master-id 主节点ID

这样就将3主3从扩展到了4主4从的效果。
第一步:先删除主节点对应的从节点。
# 删除从节点
redis-cli --cluster del-node ip:从机端口 从机6388节点ID
# 检查从节点是否被删除
redis-cli --cluster check 127.0.0.1:6382

第二步:将主节点redis的槽号清空,重新分配。本例将清出来的槽号都给了6381节点。
# 分配槽号给6381节点
redis-cli --cluster reshard 127.0.0.1:6381
分配流程如下:


第三步:将主节点6387删除。
redis-cli --cluster del-node ip:从机端口 6387节点ID

DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
之前用过docker commit 命令来将容器保存成镜像,从而达到一个加强版的镜像。而Dockerfile要比这种方式还要简单。


Dockerfile文档官方地址:https://docs.docker.com/engine/reference/builder/
DockerFile内容基础知识:
Docker执行DockerFile的大致流程:

DockerFile就类似配置文件一样。
可以参考tomcat8的dockerfile:https://github.com/docker-library/tomcat
from保留字:

maintainer保留字:

run保留字:



expose保留字:

workdir保留字:


user保留字:

env保留字:


volume保留字:

add保留字:

add和copy保留字功能差不多,只不过add要更强大一点,会自动处理URL和解压压缩包。
copy保留字:


cmd保留字:


注意事项:Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉。

cmd与run的区别:

entrypoint保留字:

查看图片中的案例:

保留字总结:

场景需求:
jdk8下载地址:https://mirrors.yangxingzhen.com/jdk/
因为,安装一个jdk8环境。因此,下载要给jdk8压缩包,通过ADD保留字解压,通过ENV配置环境变量。
第一步:编写Dockerfile文件,注意开头的一定是大写的D。
Dockerfile文件编写:
FROM centos
MAINTAINER zzyy<zzyybs@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
第二步:通过Dockerfile构建新镜像。

构建的时候存在以下问题为解决!!!
第三步:运行新镜像的容器。

通过Dockerfile写一个虚悬镜像。
第一步:vim Dockerfile 。
from ubuntu
CMD echo 'action is success'
第二步:docker build . 别忘记后面的点。

这样虚悬镜像就创建成功了。

对于虚悬镜像一定要删除!
第三步:通过docker image ls -f dangling=true命令可以查看当前镜像的所有虚悬镜像。

第四步:使用docker image prune命令来删除虚悬镜像。


目的:将一个微服务部署到docker容器上。
第一步:搭建一个springboot微服务项目。上传到linux服务器上面。
第二步:编写Dockerfile文件。
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER itholmes
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD SSMProject-1.0-SNAPSHOT.jar itholmes_docker.jar
# 运行jar包
RUN bash -c 'touch /itholmes_docker.jar'
ENTRYPOINT ["java","-jar","/itholmes_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001
第三步:执行构建命令:docker build -t itholmes_docker:1.6 . (不要忘记后面的点)


第四步:运行刚刚创建好的容器镜像,docker run -d -p 6001:6001 镜像ID。
