Docker部署Springboot+Eureka分布式项目

1.1 虚拟化技术

Docker部署Springboot+Eureka分布式项目

1.1.1 问题描述

互联网的发展使软件业发生了巨大的变化,其中一个显著的变化是软件的规模越来越大,基于微服务架构的软件在

生产部署时遇到了这样的挑战:

1、微服务的开发语言、操作系统、依赖库等环境配置不同,如何快速安装、迁移、配置软件?

2、一个软件由若干微服务组成,如何快速批量部署微服务?

3、如何有效的利于计算机资源?

针对前两个问题的思考:

传统的软件部署流程是:安装操作系统-->安装依赖软件/-->安装软件(微服务)-->配置软件-->最终软件上线运

行,面对大量的微服务及微服务集群,使用此方案不仅效率低下,而且还可能会出现环境兼容问题,显然此方案不

适合用在微服务部署。

设想:如果有一项技术可以快速的将软件及所需要的各种环境配置打包、批量复制将会解决以上问题。

针对第三个问题的思考:

在一台计算机只安装一个微服务对计算机资源极大的浪费,如果安装多个微服务就可以有效的利于计算机资源,但

是对于批量软件的安装部署还是会面临12问题。

设想:在一台计算机安装多个微服务,使用一种技术将微服务打包、复制部署,并且微服务之间隔离互不影响


1.1.2 虚拟化技术

引用百度百科(https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%8C%96/547949

Docker部署Springboot+Eureka分布式项目

总结:虚拟化技术是对软件基础设施、操作系统、软件等IT资源进行有效的管理,使用户不再受物理资源的限制,

提高计算机资源的利用率。虚拟化技术是云计算的基础,例如阿里云的云主机、腾讯云等都应用了虚拟化技术。

虚拟化技术整体上包括两个方面:硬件虚拟化和软件虚拟化,具体分为:网络虚拟化、存储虚拟化、桌面虚拟化、

服务器虚拟化等,我们平常说的最多的是服务器虚拟化。

服务器虚拟化就是在同一个物理服务器上运行多个虚拟机,让服务器的cpu、内存、磁盘、I/O等硬件设施为每个

虚拟机服务,在每个虚拟机中运行不同的软件,虚拟机之间是隔离状态。

服务器虚拟化主要有两种技术:

1Hypervisor也叫VMMvirtual machine monitor)即虚拟机监视器

Hypervisor是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机

guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。

如下图:

Docker部署Springboot+Eureka分布式项目

在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMwareVirtualBox等,由

hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。

2Containers容器化技术

Docker部署Springboot+Eureka分布式项目

容器技术中docker引擎取代了hypervisordocker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个

docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。

3、技术对比:

资源占用:

虚拟机由于是独立的操作系统,占用资源比docker多。

启动速度:

虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动

一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。

体积:

容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体

积比容器大的多。


1.1.3 Docker介绍

引用百度百科(https://baike.baidu.com/item/Docker

Docker部署Springboot+Eureka分布式项目

Docker 源代码托管在 Github , 基于go语言并遵从Apache2.0协议开源。

官网:https://www.docker.com/  

Docker包括以下部分:

引用百度百科https://baike.baidu.com/item/Docker

Docker部署Springboot+Eureka分布式项目

1Docker daemonDocker守护进程): Docker守护进程是部署在操作系统上,负责支撑Docker Container

运行以及本地Image的管理。

2Docker client: 用户不直接操作Docker daemon,用户通过Docker client访问DockerDocker client提供

pullrun等操作命令。

3Docker ImageDocker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环

境,里面仅安装了 Tomcat或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很

简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使

用。

4Docker ContainerDocker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停

止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。

5Docker RegistryDocker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式 最大的公开仓库是

Docker Hub,存放了数量庞大的镜像供用户下载。 用户也可以在本地网络内创建一个私有仓库。 当用户创建了自

己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时

候,只需要从仓库上 pull 下来就可以了。


2.1 部署微服务到Docker


Docker可以运行MACWindowsCentosDEBIANUBUNTU等操作系统上,提供社区版和企业版,本教程基

Centos安装DockerCentos6docker支持的不好,使用docker建议升级到centos7

1、在Centos7上安装Docker

直接通过yum安装即可:

yum install -y docker

启动dockerservice docker start

查询docker版本:docker version

2、在Centos6上安装Docker

rpm -ivh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install -y docker-io

service docker start

2.2 部署流程

本项目微服务采用SpringBoot开发,将每个微服务工程打成Jar包,最终在Docker容器中运行jar,部署流程如下:

1SpringBoot工程最终打成 Jar

2、创建Docker镜像

3、创建容器

4、启动容器

2.3 打包

1、使用maven的打包插件:

将下边的插件依赖拷贝到微服务工程中,本例子项目是分布式springboot+Eureka工程打包:

Docker部署Springboot+Eureka分布式项目

完整的Eureka工程pom.xml文件如下:

Docker部署Springboot+Eureka分布式项目

2maven打包

在工程目录运行:mvn clear package

或通过IDEA执行clear package打包命令。

打包成功,如下图:


Docker部署Springboot+Eureka分布式项目


2.4 创建镜像

将上一步的jar包拷贝到Linux服务器,准备创建镜像。

测试jar包是否可以运行,执行:java -jar govern-center-1.0-SNAPSHOT.jar

govern-center-1.0-SNAPSHOT.jar 位置编写Dockerfifile文件

FROM java:8

ENV ARTIFACTID govern‐center

ENV ARTIFACTVERSION 1.0‐SNAPSHOT

ENV HOME_PATH /home

WORKDIR $HOME_PATH

ADD /$ARTIFACTID‐$ARTIFACTVERSION.jar $HOME_PATH/$ARTIFACTID.jar

ENTRYPOINT ["java", "‐jar", "xc‐govern‐center.jar"]

Docker部署Springboot+Eureka分布式项目

Dockerfifile文件所在目录执行:docker build -t govern-center:1.0-SNAPSHOT .

镜像创建成功,查询镜像:


[[email protected] govern‐center]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE govern‐center 1.0‐SNAPSHOT ad14dcce6666 35 seconds ago 684 MB



2.5 创建容器

基于 govern-center:1.0-SNAPSHOT镜像创建容器,容器名称为govern-center-test

docker create ‐‐name govern‐center‐test ‐t ‐p 50101:50101 ‐e PORT=50101 ‐e EUREKA_SERVER=http://192.168.101.64:50101/eureka/,http://192.168.101.64:50102/eureka/ govern‐center:1.0‐SNAPSHOT


容器创建成功,可通过docker ps -a命令查看

2.6 启动容器

docker start xc-govern-center-test

容器启动完成可以通过docker ps 查询正在运行中的容器。

[[email protected] govern‐center]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 688cabeef187 govern‐center:1.0‐SNAPSHOT "java ‐jar xc‐gove..." 2 minutes ago Up 2 minutes 0.0.0.0:50101‐>50101/tcp govern‐center‐ test


2.7 停止与删除

要删除的一个镜像重新创建,需要通过如下步骤:

1、停止正在运行的容器

docker stop 容器名

例如:docker stop govern-center-test

2、删除容器

docker rm 容器名

例如:docker rm govern-center-test

3、删除镜像

docker rmi 镜像名或镜像Id

例如:docker rmi govern-center:1.0-SNAPSHOT

Docker部署Springboot+Eureka分布式项目

扫描关注获取Jerbrins全家桶正版**码

Docker部署Springboot+Eureka分布式项目