使用Docker、swarm、registry 快速编排Spring Cloud 服务系统核心思想及案例

版权声明:原创,转载备注出处。 https://blog.csdn.net/qq_19239339/article/details/81031141

写在前面

本文的读者适合,devops/运维/测试/开发;

需要掌握知识:

1、Docker 的安装 已经简单使用

2、Docker-compost安装及使用,懂得yml文件结构语法及docker-compost文件编排服务的语法;

3,registry(镜像仓库) 安装、上传、下载。

什么问题

通过上篇Jenkins/git/maven/ssh/docker案例 

我们来解释一下部署的流程


问题:

1、只能部署在一台宿主机上,一旦宿主机挂了GG 思密达;

2、不能满足容器之间可以通信的要求(虽然可以使用docker的方式解决 但是配置复杂)

3、不利于维护和扩展,我们一个应用可能要部署一个数据库、一个app 、redis等等;

解决方案

使用swarm实现跨宿主机容器服务编排


案例介绍

    使用jenkins,Docker,swarm,registry,实现eureka服务高可用集群;

       注册发现组件eureka配置
        
server.port = 8761
eureka.instance.hostname =本地主机
eureka.client.registerWithEureka = FALSE
eureka.client.fetchRegistry = FALSE
eureka.client.serviceUrl.defaultZone = ${EUREKA_SERVER_LIST}

 
 
dockerFile文件

FROM java

ADD Sping-Cloud-eureka-Server-0.0.1-SNAPSHOT.jar  /usr/src/myapp/eureka.jar
ENTRYPOINT ["java","-jar","/usr/src/myapp/eureka.jar"]

DockerCompost.yml

#使用dockercompost 3版本进行编写 遵守3版本的语法
version: '3'
#services 表示服务的列表总称 证明之下的节点都是关于每一个service的配置
services:
  #在 services 标签下的第二级标签是 eureka1,这个名字是用户自己自定义,它就是服务名称 也是主机hostname名称。
  eureka1:
    # eureka1服务的子节点image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
    image: 192.168.19.132:5000/java:euraka
    # eureka1服务的子节点网络 说明这个eureka1服务需要加入的网络组名称是eureka-overlay,可以指定任意名称
    networks:
      eureka-overlay:
      #特别的子标签aliases,这是一个用来设置服务别名的标签都是eureka,对于客户端可以在配置文件中指定这个别名即可,不必指定三个示例的名字
        aliases:
          - eureka
    #映射的端口列表,在swarm集群中所有的节点都必定会被映射
    ports:
      - "8761:8761"
      #环境变量
    environment:
      - EUREKA_SERVER_LIST=http://eureka2:8761/eureka/,http://eureka3:8761/eureka/
  eureka2:
    image: 192.168.19.132:5000/java:euraka
    networks:
      eureka-overlay:
        aliases:
          - eureka
    ports:
      - "8762:8761"
    environment:
      - EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka3:8761/eureka/
  eureka3:
    image: 192.168.19.132:5000/java:euraka
    networks:
      eureka-overlay:
        aliases:
          - eureka
    ports:
      - "8763:8761"
    environment:
      - EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

networks:
  eureka-overlay:
    #外部的、、资料没找到推测可能是其他节点需要有swarw来创建这个Network
    external:
      name: eureka-overlay
shell脚本

#! /bin/bash
#网络名称
networkname="eureka-overlay"
#编排文件
docker_compost_yml="eureka.yml"
#创建的image_name
build_image_Name="java:euraka"
#工作目录
Work_dir="/honme"
#image——tag
Docker_image_tag="192.168.19.132:5000/java:euraka"
#服务列表
Service_names="java_eureka1 java_eureka2 java_eureka3"

cd ${Work_dir}
echo cd ${Work_dir}

docker build -t ${build_image_Name} .

docker tag ${build_image_Name}  ${Docker_image_tag}
docker push ${Docker_image_tag}

docker service ls

for service in $Service_names;
do
    docker service rm  $service

done

docker network rm ${networkname}
docker network create -d overlay ${networkname}
docker network ls
docker stack deploy  -c ${docker_compost_yml} java

for service in $Service_names;
do
    docker service ps  $service
    echo $service
done

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")
rm -rf /home/Sping-Cloud-eureka-Server-0.0.1-SNAPSHOT.jar
rm -rf /home/Dockerfile
rm -rf /home/eureka.yml
docker service ls
docker node ls
执行需求

    1、jenkins服务可正常打包

    2、Linux 机器3台 均已安装最新的docker版本,修改hostname 为 master 、Node1、Node2、并可ssh访问

    3、master安装进行swarm初始化、Node节点加入

    4、master安装registry镜像仓库;

    执行过程

    1、Jenkins将打好的包及dockerCompost.yml 、Dockerfile 、dockershell脚本拷贝至master主机

    2、执行shell脚本逻辑自动进行服务编排打包;

        2.1 根据dockerfile build 新的镜像

        2.2 将新的镜像上传到registry仓库;

         2.3根据 dockerCompost.yml  执行服务编排

执行效果

1、在任何节点的IP+端口,都可以被访问到服务、哪怕那个节点没有部署对应的服务也可以访问;

2、服务被分别部署到不同的节点;

3、容器之间通信正常;

    

猜你喜欢

转载自blog.csdn.net/qq_19239339/article/details/81031141