• Docker 学习笔记总结(三)


    1. docker 搭建 三主三从的redis集群


    架构图:
    在这里插入图片描述


    第一步:启动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节点。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    参数命令解释:
    在这里插入图片描述

    启动后的容器:
    在这里插入图片描述

    第二步:进入其中一个节点,构建主从关系。

    # 进入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
    
    • 1
    • 2
    • 3
    • 4

    --cluster-replicas 1 表示为每个master创建一个salve节点,就是1:1的主从比例。

    在这里插入图片描述
    在这里插入图片描述

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

    • cluster info命令:打印集群的信息.
    • cluster nodes命令:查看集群节点。
      在这里插入图片描述
      在这里插入图片描述
      到了这,一个3主3从的redis集群就算搭建成功!

    注意错误:

    • 因为是集群了,所以不能用单机版命令进入redis客户端,要添加-c的参数以集群模式启动。
      在这里插入图片描述
    • 添加-c后,在数据读写时就会有读写路由切换的一个效果。
      在这里插入图片描述
      其实就是通过哈希槽分区算法,算出要插入的槽位,进而切换到槽位所在的节点而已。

    第四步:redis-cli --cluster check 127.0.0.1:6381
    命令查看集群信息。

    在这里插入图片描述

    2. redis集群 之 主从容错切换迁移(基于redis集群)


    容错就是如果redis某个节点宕机了的情况。

    主节点宕机,对应的从节点通过心跳检测,检测不到就会上位。
    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

    3. redis集群 之 主从扩容(基于redis集群)


    扩容就是添加节点的情况。

    第一步:新建6387,6388两个redis节点。
    在这里插入图片描述

    第二步:将新增的6387节点作为master节点加入集群。

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

    在这里插入图片描述
    第三步:虽然节点已经加入了集群,但没有槽位的。所以要重新分派槽号。

    redis-cli --cluster reshard IP地址:端口号
    
    • 1

    在这里插入图片描述
    执行reshard命令后,要填写一些配置:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第四步:槽号分派是从前面几个节点分出了一些槽号给新节点。
    在这里插入图片描述
    在这里插入图片描述

    第五步:为主节点6387分配从节点6388。

    # 从节点绑定
    redis-cli --cluster add-node 从节点IP:从节点端口 主节点IP:主节点端口 --cluster-slave --cluster-master-id 主节点ID
    
    • 1
    • 2

    在这里插入图片描述

    这样就将3主3从扩展到了4主4从的效果。

    4. redis集群 之 主从缩容(基于redis集群)


    第一步:先删除主节点对应的从节点。

    # 删除从节点
    redis-cli --cluster del-node ip:从机端口 从机6388节点ID
    # 检查从节点是否被删除
    redis-cli --cluster check 127.0.0.1:6382  
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    第二步:将主节点redis的槽号清空,重新分配。本例将清出来的槽号都给了6381节点。

    # 分配槽号给6381节点
    redis-cli --cluster reshard 127.0.0.1:6381
    
    • 1
    • 2

    分配流程如下:
    在这里插入图片描述
    在这里插入图片描述

    第三步:将主节点6387删除。

    redis-cli --cluster del-node ip:从机端口 6387节点ID
    
    • 1

    在这里插入图片描述

    5. DockerFile 介绍


    DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

    之前用过docker commit 命令来将容器保存成镜像,从而达到一个加强版的镜像。而Dockerfile要比这种方式还要简单。

    在这里插入图片描述
    在这里插入图片描述

    Dockerfile文档官方地址:https://docs.docker.com/engine/reference/builder/

    6. DockerFile 构建过程解析


    DockerFile内容基础知识:

    • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
    • 指令按照从上到下,顺序执行。
    • #表示注释。
    • 每条指令都会创建一个新的镜像层并对镜像进行提交。

    Docker执行DockerFile的大致流程:
    在这里插入图片描述
    DockerFile就类似配置文件一样。

    7. DockerFile 保留字简介


    可以参考tomcat8的dockerfile:https://github.com/docker-library/tomcat


    from保留字:

    • 就是基于来自哪个镜像的。
      在这里插入图片描述

    maintainer保留字:
    在这里插入图片描述


    run保留字:

    • 两种格式:shell格式和exec格式。
    • run是在docker build时运行。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    expose保留字:
    在这里插入图片描述


    workdir保留字:
    在这里插入图片描述
    在这里插入图片描述


    user保留字:
    在这里插入图片描述


    env保留字:
    在这里插入图片描述
    在这里插入图片描述


    volume保留字:
    在这里插入图片描述


    add保留字:
    在这里插入图片描述
    add和copy保留字功能差不多,只不过add要更强大一点,会自动处理URL和解压压缩包。


    copy保留字:
    在这里插入图片描述
    在这里插入图片描述


    cmd保留字:
    在这里插入图片描述
    在这里插入图片描述

    注意事项:Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉。
    在这里插入图片描述

    cmd与run的区别:
    在这里插入图片描述


    entrypoint保留字:

    在这里插入图片描述
    查看图片中的案例:
    在这里插入图片描述


    保留字总结:
    在这里插入图片描述

    8. DockerFile 保留字案例演示


    场景需求:

    • centos镜像具备vim + ifconfig + jdk8。

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    第二步:通过Dockerfile构建新镜像。

    • 格式:docker build -t 新镜像名字:TAG . 别忘记后面还有个点。

    在这里插入图片描述

    构建的时候存在以下问题为解决!!!在这里插入图片描述

    第三步:运行新镜像的容器。

    • 格式:docker run -it 新景象名字:TAG

    9. 虚悬镜像


    在这里插入图片描述

    通过Dockerfile写一个虚悬镜像。

    第一步:vim Dockerfile 。

    from ubuntu
    CMD echo 'action is success'
    
    • 1
    • 2

    第二步:docker build . 别忘记后面的点。
    在这里插入图片描述
    这样虚悬镜像就创建成功了。
    在这里插入图片描述
    对于虚悬镜像一定要删除!

    第三步:通过docker image ls -f dangling=true命令可以查看当前镜像的所有虚悬镜像。
    在这里插入图片描述

    第四步:使用docker image prune命令来删除虚悬镜像。
    在这里插入图片描述
    在这里插入图片描述

    10. Docker 微服务实战


    目的:将一个微服务部署到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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    第三步:执行构建命令:docker build -t itholmes_docker:1.6 . (不要忘记后面的点)
    在这里插入图片描述
    在这里插入图片描述

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

    • 测试端口可以使用curl命令 来进行访问。
      在这里插入图片描述
  • 相关阅读:
    【自动化脚本】常用自动化脚本一览【持续更新】
    含文档+PPT+源码等]精品基于Uniapp实现的美食APP[包运行成功]计算机毕业设计安卓项目源码
    Android 应用启动过程优化
    常见音视频、流媒体开源编解码库及官网(四十一)
    软件过程与管理_期末复习知识点回顾总结
    货币银行学核心知识点
    红黑树的模拟实现
    【LeetCode】【剑指offer】【二维数组中的查找】
    用户态切换到内核态的方式
    EF7创建模型入门篇
  • 原文地址:https://blog.csdn.net/IT_Holmes/article/details/126687729