微服务的部署

一. Docker Compose 编排工具

(一). Docker Compose 介绍

       使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低、维护量之大可想而知。本节课将讨论如何使用 Docker Compose来轻松、高效地管理容器。为了简单起见将 Docker Compose简称为 Compose。
       Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你可以在一个配置文件(yaml格式)中配置你应用的服务,然后使用一个命令,即可创建并启动配置中引用的所有服务。

(二). Docker Compose 的安装与卸载

1. 安装条件

Docker Compose 是依赖于Docker 引擎的,所以在安装 Docker Compose之前要确保机器上安装了Docker(可以使用docker -v指令查看)

2. 安装Compose

  • 使用curl 命令从github 的Compose仓库拉取Docker Compose,具体指令如下。
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s `-`uname -m` -o /usr/local/bin/docker-compose
  • 更改Docker Compose 的可执行文件权限
sudo chmod +x /usr/local/bin/docker-compose
  • 查看安装的Docker Compose版本信息,如果正常返回就表示安装成功。效果如下图所示。
docker-compose --version

微服务部署-01

3. 卸载Compose

按照上述步骤使用curl 安装的Docker Compose,可以使用rm 指令来卸载,具体指令如下:

sudo rm /usr/local/bin/docker-compose

(三). Compose file 文件的使用和说明

二. 微服务与 Docker 的整合

1. 添加Dockerfile文件

2. 添加Dockerfile-maven插件

3. 添加docker-compose.yml 编排工具

三. 环境搭建以及镜像准备

(一). 环境搭建

1. 搭建Docker 主机

        要将微服务项目运行在Docker中,首先必须保证运行环境安装了Docker 引擎,这里我们就选用之前搭建的集群环境,我们将名为manager1的Docker机器作为本次微服务部署的主机,同时也是集群环境下的管理节点,而另两台名为worker1 和 worker2的Docker机器仍作为集群环境下的工作节点。
        需要说明的是,在此演示为了方便查看和管理,我们需要在manager1服务主机上搭建本地私有镜像仓库,其仓库地址为 192.168.197.143:5000,这与前面项目配置和整合文件编写的镜像前缀地址都是一致的,否则无法推送到指定仓库。

2. 安装应用编译工具jdk

        在使用mvn install命令过程中,需要使用jdk进行编译打包,所以我们需要预先安装配置好jdk环境。具体配置过程如下。

  • 下载Linux 版本的JDK工具包,本项目使用的是jdk-8u144-linux-x64.tar.gz版本,并且在linux机器上使用tar命令进行解压,具体指令如下:
sudo tar -zxf jdk-8u144-linux-x64.tar.gz

在这里插入图片描述

  • 将执行上述解压指令后产生的解压包移动到自定义目录下(在这里直接将解压包移动到了/usr/lib/jvm目录下,如果不存在,需要提前创建该目录),具体操作指令如下。
sudo mv jdk1.8.0_144/ /usr/lib/jvm

在这里插入图片描述

  • 配置JDK环境变量。修改/etc/profile文件,在该文件中添加以下配置(注意JDK解压包名称和版本号)。
#set java environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_144/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 完成JDK配置后,我们可以执行source /etc/profile指令使配置立即生效。用java -version命令查看安装后的效果。
    在这里插入图片描述

3. 安装应用打包工具Maven

        在前面介绍微服务与Docker整合配置时就已经说明,此次整合部署是通过Maven的install命令进行自动执行打包,镜像构建和推送的,所以在此必须先要安装和配置好Maven。其具体配置过程如下:

  • 下载Linux版本的Maven工具包,本书使用的时Apache-maven-3.5.0-bin.tar.gz版本,并在Linux机器上使用tar命令进行解压,具体操作指令如下:
sudo tar -zxf apache-maven-3.5.0-bin.tar.gz

在这里插入图片描述

  • 将执行上述解压命令后产生的解压包移动到自定义目录下(这里将解压包直接移动到了opt目录下),具体操作指令如下:
sudo mv apache-maven-3.5.0/ /opt/

在这里插入图片描述

  • 配置Maven环境变量。修改/etc/profile文件,在profile文件中添加以下配置(注意Maven解压包名称和版本号):
#set maven environment
export M2_HOME=/opt/apache-maven-3.5.0/
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2:$PATH
  • 完成有关Maven的环境变量配置后,同样可以执行source /etc/profile指令使配置立即生效,然后通过mvn -v 命令查看安装配置后的Maven信息。
    在这里插入图片描述

(二). 镜像准备

        由于之前dockerfile-maven的配置,在完成打包后也会自动构建镜像并推送到指定仓库,但无论是推送到Docker Hub还是本地私有镜像仓库,必须先登录认证才可进行推送。所以为了能够自动打包、构建镜像和推送镜像,在使用mvn install命令打包之前,除了需要预先在dockerfile-maven插件配置中配置<useMavensettingsForAuth>'标签属性值为true外,还需要在Maven的settings.xmt配置文件(参考上一小节基础环境搭建时Maven的安装位置,此示例中的地址为/opt/apache-maven-3.5.0/convsettings.xml)中配置服务认证信息,具体配置内容如下(注意要配置在<servers>标签内)。

sudo vi /opt/apache-maven-3.5.0/conf/settings.xml

配置内容:

<server>
    <id>192.168.197.143:5000</id>
    <username>wangshilin</username>
    <password>wangshilin</password>
</server>

        配置完成后,就可以将微服务项目microservice-mallmanagement复制到manager1服务住居下的某个工作目录下,并进入到该项目pom文件所在的位置(最外层的pom文件目录),然后使用mvn install 指令进行打包(首次打包会进行pom依赖文件的下载,所以需要一定的时间)
        由执行完mvn install指令后的效果如下图所示:
在这里插入图片描述
        当确定全部执行成功后,我们还可以实际确认。先通过docker images指令查看镜像列表中是否有生成的指定镜像,然后再次进入本地私有镜像仓库配置的挂载目录/mnt/registry/docker/registry/v2/repositories进行确认,查看生成的镜像是否也推送到了本地仓库。
在这里插入图片描述

四. 微服务的手动部署

        准备好服务部署所需要的环境以及服务镜像后,就可以正式部署微服务项目了。这里根据具体的开发情况介绍两种部署服务的方式:非集群环境下的服务部署和集群环境下的服务部署。

(一). 非集群环境下的服务部署

        非集群环境下的服务部署就是根据所需的镜像都存放在本地私有镜像仓库,并且本地私有仓库配置有用户认证,所以想要通过本地私有仓库的镜像部署服务,就必须先登录认证,获取镜像的使用权限(Docker Hub远程仓库镜像则不需要登录认证)。具体操作指令如下。

1. 登录私有仓库

        由于此次部署的微服务所需的镜像都存放在本地私有镜像仓库,并且本地私有仓库配置有用户认证,所以想要通过本地私有仓库的镜像部署服务,就必须先登录认证,获取镜像的使用权限(Docker Hub远程仓库镜像则不需要登录认证)。具体操作指令如下。

sudo docker login 192.168.197.143:5000

在这里插入图片描述
        执行上述指令就可以登录到指定服务地址的Docker Registry本地私有镜像仓库了。此后该Docker机器就会处于持续认证状态,我们可以使用docker logout 192.168.197.143:5000 指令退出认证。

2. 部署服务

        进入到项目docker-compose.yml文件所目录下,执行服务部署指令来部署整个微服务项目,具体指令如下。

sudo docker-compose up

在这里插入图片描述
        使用docker-compose up指令是在前台部署整个服务,在终端窗口会打印出所有启动信息。如果不想看到这些信息,还可以使用docker-compose up -d指令在后台部署服务。
        当服务部署完成后,可以通过docker ps指令查看所有服务是否都已正常运行(多个相互依赖的服务同时部署过程可能需要一定的时间),效果如下图所示:
        从上图可以看出,所有的服务都已经正常启动。此时,容器中对应的应用也可以正常访问(后续会介绍具体的测试方式)。当不再需要某个服务时,可以在项目docker-compose.yml文件所在同级使用结束整个服务,具体操作指令如下:

sudo docker-compose down

在这里插入图片描述

(二). 集群环境下服务部署

1. 集群服务中的网卡选择性注册

在这里插入图片描述

  • 根据微服务项目的需求,在集群环境下预先定义一个以overlay为驱动的网络进行本地集群网络管理,具体操作指令如下:
sudo docker network create -d overlay --subnet 11.0.0.0/24 microservice_net

执行上述指令后,会创建一个以overlay为驱动,名为microservice_net的网络,并且通过–subnet参数指定该自定义网络的子网地址以11.0开头。
在这里插入图片描述

  • 在所有需要注册到Eureka中心的服务的配置文件application.yml中,添加指定注册到Eureka中心的优选服务子网址信息,具体内容如下:
  • 修改服务部署的

2. 集群服务部署

  • 登录私有仓库
sudo docker login 192.168.197.143:5000

在这里插入图片描述

  • 部署服务
    进入微服务项目中docker-compose-swarm.yml文件所在的目录下,使用docker stack deploy 部署服务,具体操作指令如下:
sudo docker stack deploy -c docker-compose-swarm.yml --with-registry-auth mallmanagement

在这里插入图片描述
上述部署服务的指令是直接在后台启动整个微服务项目的,启动完成后,可以在集群管理节点上使用 docker service ls指令查看服务详情列表,效果如下图所示:
在这里插入图片描述
从上图可以看出,集群环境下的所有服务的副本实例都已正常启动。因为该服务项目是部署在Docker Swarm集群服务上的,所以这些服务实例(此次共有8个服务实例)会随机分配到集群的三个节点中。此时我们可以在集群管理节点上,使用docker stack 的相关指令查看整个微服务项目在集群节点的分配与启动情况,具体操作指令如下。

sudo docker stack ps mallmanagemet

在这里插入图片描述
另外,由于在集群环境下部署服务是在后台启动的,所以在Docker 客户端无法查看各个服务的启动详情。这里可以在集群管理节点上通过Docker Service提供的服务日志指令来进一步查看某个具体服务从启动到运行的整个日志情况,具体操作指令如下。

sudo docker service logs -f mallmanagement_order-service

在这里插入图片描述

(三). 微服务测试

1. 通过visualizer集群服务可视化工具查看服务的启动情况。

微服务项目部署成功后,可以通过地址 http://192.168.197.143:8081(注意这本书中manage1的主机地址,读者测试时需要使用自己的主机地址)查看集群服务可视化工具visualizer界面显示情况。效果如下图所示。
在这里插入图片描述

2. 通过Eureka 注册中心查看服务的启动情况。

我们可以通过地址 http://192.168.197.143:8761/ 访问Eureka 服务注册中心的情况,查看其他微服务是否都已启动并注册到该注册中心,效果如下图所示。
在这里插入图片描述

3. 将数据库数据初始化。

本项目中MySQL数据库是使用 Docker 容器构建的,所以对MySQL数据库进行初始化时需要 先安装一个MySQL客户端,具体操作指令如下。

sudo apt install mysql-client-core-5.7

执行上述指令后,就会在当前Docker 机器上安装一个版本为5.7的MySQL客户端,通过该客户端我们就可以连接刚才启动的MySQL数据库服务上,具体操作指令如下。

mysql -h 127.0.0.1 -uroot -p

4. 测试微服务。

分别连接用户管理微服务和订单管理微服务的访问地址进行测试,具体地址分别为 http://192.168.197.143:8030/swagger-ui.htmlhttp://192.168.197.143:7900/swagger-ui.html

5. 测试验证API网关服务。

订单服务接口调用方法为 http://192.168.197.143:7900/order/findOrders/1 ,而用户微服务 接口的调用方法为: http://192.168.197.143:8030/user/findOrders/shitou ,当使用Zuul 网关代理服务后,这两个微服务接口调用方法分别更改为 http://192.168.197.143:8050/order-service/order/findOrders/1http://192.168.197.143:8050/user-service/order/findOrders/shitou ,效果分别如下图所示。
在这里插入图片描述
在这里插入图片描述

五. 使用Jenkins自动部署微服务

(一). Jenkins介绍

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。

Jenkins目的:

1、持续、自动地构建/测试软件项目。
2、监控软件开放流程,快速问题定位及处理,提示开放效率。

Jenkins特性:

开源的java语言开发持续集成工具,支持CI,CD。
易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

(二). Jenkins安装

1. 下载Jenkins

在浏览器输入Jenkins官网地址 https://jenkins.io/download/ 访问其下载页面,选中页面中Long-term Support(LTS, 长期支持)版本最下方的Generic java package(.war),进行Jenkins的war包下载,如下图所示:
在这里插入图片描述

2. 启动Jenkins服务

将下载好的jenkins.war放到manager1机器下的某个目录下,直接使用如下指令即可启动Jenkins服务。

java -jar jenkins.war --httpPort=49001

在这里插入图片描述

3. Jenkins初始化安装

  • 初始化认证密码
    在这里插入图片描述
  • 初始化插件安装
    在这里插入图片描述
  • 创建管理员用户
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(三). Jenkins集成插件配置

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

(四). 服务自动化部署

1. 构建新任务

在这里插入图片描述

(1)配置源码仓库地址

在这里插入图片描述

(2)构建触发器

在这里插入图片描述

(3)服务发布配置

在这里插入图片描述
完成配置后,效果如下图所示:
在这里插入图片描述

2. 自动化部署服务

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

猜你喜欢

转载自blog.csdn.net/qq_37955704/article/details/91410729
今日推荐