微服务SpringCloud容器化案例

摘要:
因为在单个应用程序中,部署项目非常简单,可以直接打包和启动。对于微服务来说,由于各种组件的存在,这使得测试和部署非常困难,而容器化是微服务部署的一把利剑。

前言

当我们在使用微服务的时候,那么有一个问题一定会困扰我们,那就是项目的测试和部署。因为在单体应用下,部署项目很简单,直接打包启动就可以了,而对于微服务来说,因为有各个组件的存在所以让测试和部署都变得很麻烦,而容器化是微服务的部署一把利剑。

PS:本文不介绍具体docker使用的各种基础,以及微服务的各种基础,就是给出相应的案例,你可以根据这样的案例快速学会如何将你的微服务容器化。

实际案例

让我们先来看看,实现之后如果本地要进行测试,是多么方便。
微服务SpringCloud容器化案例第1张
只需要一个命令,就能将我们的服务都启动起来,包括注册中心,网关,服务都启动了,你不需要三四台服务器,也不需要安装配置各种复杂的环境。
当我们要停止所有服务的时候呢?
微服务SpringCloud容器化案例第2张

实际案例:https://github.com/LinkinStars/MicroServiceExample/tree/dockerization

微服务容器化的步骤

  1. 编写Dockerfile构建单个镜像
  2. 编写docker-compose.yml进行容器编排
  3. 修改各个应用中的application.yml的一些访问地址

容器化相关命令

单独部署:

进入某个应用的目录(目录下有Dockerfile)

使用命令:docker build -t mic-eureka .

整体编排部署:

进入根目录(目录下有docker-compose.yml)

使用命令:docker-compose up -d

容器化说明

在所有module每个目录下面都存在一个Dockerfile,类似如下:

# 基础镜像
FROM java:openjdk-8u111

# 作者
MAINTAINER LinkinStar linkinstar@foxmail.com

# 将build/libs下的jar包拷贝到容器中的根目录,并命名为app.jar
COPY build/libs/*.jar /app.jar

# 声明开放端口
EXPOSE 8761

# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]

容器编排:

在根目录下有docker-compose.yml文件,用于进行容器编排:

# 声明版本
version: '3'

# 声明各个服务services
services:
  # 服务名称
  mic-eureka:
    # 构建当前服务的Dockerfile位置
    build:
      context: eureka
    # 镜像名称
    image: mic-eureka:latest
    # 映射的开放端口
    ports:
      - 8761:8761
  
  mic-gateway:
    build:
      context: gateway
    image: mic-gateway:latest
    # 需要关联的应用,这些关联的应用可以通过下面的名称来访问,类似域名的概念
    links:
      - mic-eureka
      - mic-pay
      - mic-order
    ports:
      - 8769:8769
      
  mic-pay:
    build:
      context: pay
    image: mic-pay:latest
  
  mic-order:
    build:
      context: order
    image: mic-order:latest
 

总结

对于jar包,我们还是需要手动用gradle的bootJar进行打包,其实可以编写相应的shell脚本来完成,这样更加的自动方便一些。 针对实际项目中,还有数据库,redis,mq这些都可以交由容器去进行部署和编排,这里只是抛砖引玉,对于这些的部署和实现就交给你来完成啦。

免责声明:文章转载自《微服务SpringCloud容器化案例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基础数论--扩展欧几里得算法mount 时遇到connection unfused 错误操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

实现Mac主机上的Docker容器中的图形界面显示(运行GUI应用)

我有一个需求: 一方面,我需要在 Docker 容器环境下运行应用(因为有些环境在 Mac 下很难安装配置,并且希望环境干净隔离)。 另一方面,容器中的应用又需要进行图形界面的显示。 由于 Docker 容器是命令行的形式,本身不支持图形界面显示,因此我希望 Docker 容器能和我的 Mac 主机上的 GUI 进行连接。 我的 Mac OS X 系统...

Docker(一)

Docker的优势: 1.更高效的利用系统资源。不需要运行系统。 2.更快的启动时间。运行在主机内核。 3.一致的运行环境,持续交付和部署。 4.更轻松地拓展和维护。 docker -v :查看Docker版本。 yum remove docker-ce:卸载Docker软件包。 yum remove docker docker-common docker...

火狐与IE兼容性总结(一)

兼容性一直都是个令人头痛的问题,下面简单总结火狐与IE的兼容性问题。 1. 超链接访问过后hover样式就不出现的问题     被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-A <style type="text/css">      <...

harbor仓库搭建

harbor仓库搭建  harbor安装要求   harbor快速部署     下载harbor:https://github.com/goharbor/harbor/releases 这边以harbor-1.8.2为例  [root@gitlab home]# tar -xf harbor-offline-installer-v1.8.2.tgz...

Android编译大全(五)

6.1.2.make文件分类2  配置类 主要用来配置product、board,以及根据你的Host和Target选择相应的工具以及设定相应的通用编译选项: config文件 说明 build/core/config.mk Config文件的概括性配置 build/core/envsetup.mk generate目录构成等配置 build/target...

使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

1、IoC/DI简介 IoC 即 Inversion of Control,DI 即Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详细的说明可参见大牛Martin Fowler的强文http://martinfowler.com/articles/injection.html,借用Holly...