龙空技术网

基于Spring Cloud, Docker, Docker Swarm等构建微服务演示项目

软件架构 1517

前言:

眼前各位老铁们对“thinkpadt14安装ubuntu”大致比较讲究,同学们都需要知道一些“thinkpadt14安装ubuntu”的相关内容。那么小编在网络上搜集了一些对于“thinkpadt14安装ubuntu””的相关内容,希望朋友们能喜欢,你们快快来了解一下吧!

本文基于Spring cloud, Docker, Docker swarm, mysql等构建微服务演示项目。

Spring Cloud + Docker Swarm 演示环境Windows 10 – Docker Client(Spring Cloud 开发环境)CentOS-101 – ManagerUbuntu-102 – Worker1CentOS-103 – Worker2

Docker Registry v2 - 部署在CentOS-101上

Spring Cloud 项目 - MallManagement

项目源代码github:

第一步,构建镜像,并上传到registry 仓库

1. 设置 Docker的insecure-registries 属性,支持Docker Client 端推送images 镜像

如不按照上述设置该属性,Docker Client 推送 Images 将产生如下异常:

docker registry push错误“server gave HTTP response to HTTPS client”

解决方法:

在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

{ "insecure-registries":["192.168.56.101:5000"] }

[root@local ~]# vim /etc/docker/daemon.json

重启 docker:

[root@local ~]# systemctl daemon-reload

[root@local ~]# systemctl restart docker.service

验证insecure-registries 添加成功:

[root@local ~]# docker info

2. 对整个MallManagement 项目,进行maven build 操作:(可略过)

mvn clean package --- 仅仅构建 jar 包,验证代码是否正常。

[INFO] microservice-mallmanagement 0.0.1-SNAPSHOT ......... SUCCESS [ 1.553 s]

[INFO] microservice-eureka-server ......................... SUCCESS [ 6.306 s]

[INFO] microservice-gateway-zuul .......................... SUCCESS [ 2.164 s]

[INFO] microservice-orderservice .......................... SUCCESS [ 4.694 s]

[INFO] microservice-userservice 0.0.1-SNAPSHOT ............ SUCCESS [ 2.384 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 18.801 s

[INFO] Finished at: 2018-06-08T13:09:48+08:00

3. Docker Client(在Windows 10 系统)向 Docker Registry 推送镜像:(可略过)

针对单个项目,构建 image镜像。注意:需要在子项目的根目录下面,执行下面的命令,不能在项目的根目录。

D:\Github\SpringCloudDocker\microservice-mallmanagement\microservice-eureka-server>mvn dockerfile:build

下面是构建 eureka server image 镜像。

[INFO] Detected build of image with id 47302f5bfdea

[INFO] Building jar: D:\Github\SpringCloudDocker\microservice-mallmanagement\microservice-eureka-server\target\microservice-eureka-server-0.0.1-SNAPSHOT-docker-info.jar

[INFO] Successfully built 192.168.56.101:5000/microservice-eureka-server:0.0.1-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 17.412 s

[INFO] Finished at: 2018-06-08T13:14:26+08:00

[INFO] ------------------------------------------------------------------------

如上述命令出现异常,也可以通过 docker build 命令行,手工构建镜像(需要到dockerfile 子项目目录下执行):

D:\Github\SpringCloudDocker\microservice-mallmanagement\microservice-eureka-server>docker build -t 192.168.56.101:5000/microservice-eureka-server:0.0.1-SNAPSHOT .

可以略过下面的步骤,直接使用 mvn clean install 来完成整个项目的 images 镜像推送。

D:\>docker push 192.168.56.101:5000/microservice-eureka-server

The push refers to repository [192.168.56.101:5000/microservice-eureka-server]

bfd212a869c0: Pushed

73ad47d4bc12: Pushed

c22c27816361: Pushed

04dba64afa87: Pushed

500ca2ff7d52: Pushed

782d5215f910: Pushed

0eb22bfb707d: Pushed

a2ae92ffcd29: Pushed

4. mvn clean install -- 对整个MallManagement 项目构建images镜像,并推送到 docker registry 中。

D:\Github\SpringCloudDocker\microservice-mallmanagement>mvn install 或者 mvn clean install

[INFO] Reactor Summary:

[INFO]

[INFO] microservice-mallmanagement 0.0.1-SNAPSHOT ......... SUCCESS [ 1.481 s]

[INFO] microservice-eureka-server ......................... SUCCESS [ 23.748 s]

[INFO] microservice-gateway-zuul .......................... SUCCESS [ 19.344 s]

[INFO] microservice-orderservice .......................... SUCCESS [ 16.014 s]

[INFO] microservice-userservice 0.0.1-SNAPSHOT ............ SUCCESS [ 35.721 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 01:37 min

[INFO] Finished at: 2018-06-08T14:23:22+08:00

[INFO] ------------------------------------------------------------------------

docker images -- 查看构建完成的images 镜像

D:\Github\SpringCloudDocker\microservice-mallmanagement>docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.56.101:5000/microservice-userservice 0.0.1-SNAPSHOT db5d7e7b3902 About an hour ago 354MB

192.168.56.101:5000/microservice-orderservice 0.0.1-SNAPSHOT 06e8f2c4d4f8 About an hour ago 355MB

192.168.56.101:5000/microservice-gateway-zuul 0.0.1-SNAPSHOT 3b2c1dc25574 About an hour ago 351MB

192.168.56.101:5000/microservice-eureka-server 0.0.1-SNAPSHOT 5e200ceaa8ce About an hour ago 351MB

访问 ,查看registry 仓库中的镜像列表:

{

repositories: [

"microservice-eureka-server",

"microservice-gateway-zuul",

"microservice-orderservice",

"microservice-userservice"

]

}

第二步,Docker Compose 管理和控制由多个容器所组成的服务项目

1. 使用 docker-compose up 命令,让Docker Compose 完成项目镜像的构建、容器创建、容器启动和容器之间的连接。

D:\Github\SpringCloudDocker\microservice-mallmanagement>docker-compose up mallmanagement

可以通过 docker ps 查看启动的容器。

同时,可以使用 docker-compose logs 获得服务日志。

docker-compose logs <service>

查看MallManagement 项目的服务:

Eureka Server:

虽然在docker-compose.yml 文件中,有设置order-service和user-service的 replicas =2,但是在 eureka server的UI界面,发现注册的只有1个。

其实,注册的是服务的虚拟IP地址(virtual IP),作为client 访问后端service 的前端入口。Docker 在client和service的工作节点之间路由请求,client 端不必了解服务service有多少个节点,或它们的IP地址和端口。

Docker 1.12通过集群内置的DNS服务实现服务发现,通过vip实现自动负载均衡。

所谓Vip机制,就是docker swarm为每一个启动的service分配一个vip,并在DNS中将service name解析为该vip,发往该vip的请求将被自动分发到service下面的诸多active task上(down掉的task将被自动从vip均衡列表中删除)。

为了更明显地感知有多个 service instances 在运行,可以调整service 的application.yml 配置文件,设置 eureka.instance.instance-ip 的属性值:

eureka:

instance:

prefer-ip-address: true # true - 优选通过IP地址找到对应的服务名称

instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}

重新构建images镜像,并上传到 registry 仓库,重新启动 docker-compose up 容器。

可以看到如下效果:

访问对应的service url,查看返回结果:

Order Service:

User Service:

第三步,Docker Swarm 进行 Docker 集群管理和容器编排

Swarm 内部的DNS 服务器能确保有一个稳定的名称解析机制。

服务之间都能够通过服务的虚拟 IP 地址(带有负载均衡的服务),来访问到分布的容器。

1. 创建 Docker Swarm 集群

docker swarm init 【单节点的集群】

docker swarm init --advertise-addr IP-ADDR 【IP-ADDR 为集群管理节点】

2. 查看集群节点信息

docker node ls

C:\Users\Rickie>docker node ls

ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION

pygc47y3oj9utj1reqpgvjumn * linuxkit-00155d380113 Ready Active Leader 18.03.1-ce

此时,集群中只有一个节点(默认为管理节点)。

Status:指的是节点物理可访问性。如果节点是启动的,显示为 Ready,否则,显示为Down。

Availability:指的是节点可用性。状态可以是 Active(节点正在运行,可以接受任务)、Pause(待命,挂起,不接受任务)、Drain(等待疏散其任务 )。

Manager Status:指的是管理器的当前状态。如果节点不是管理器,该字段为空;如果节点是管理器,该字段可以为 Reachable(待命,保证高可用的管理器之一),或者为Leader(主导所有运营的主机)。

管理很多的管理器和Worker时,务必保证高可用(管理器个数为奇数,大于或者等于3)。

移除管理器

管理器不能强制移除。在移除某个管理器节点时,必须首先将其降级(demote)为worker,兵器疏散其节点上的任务,然后关闭。

docker node demote manager-node

docker node update --availability drain manager-node

# node shutdown

docker node rm manager-node

3. 向 Docker Swarm 集群中添加工作节点

可以使用docker swarm join --token worker 显示如下加入指令:

docker swarm join --token SWMTKN-1-50fiib3awfd9282eqq9cpo1evji1t7ieh2pgntrtfo2uskentq-4f0tl8wh3m0lkaiw98llwvm32 192.168.56.101:2377

【Swarm v2 使用2377 作节点发现,端口2377 是Swarm v2节点用来发现集群里的其他节点的。】

在join 2 台docker node之后,再次查看node 节点信息,总共有3台。

访问 visualizer UI 服务:

可以查看服务实例在每个node节点上的部署情况。

标签: #thinkpadt14安装ubuntu