Docker Swarm运行Spring Cloud应用(一):部署

简介: Docker Swarm Mode集群和传统的Swarm集群最大的差异是利用引擎内置的集群管理能力,取消了对KVStore依赖,简化了Docker集群的创建和管理。随着商业化产品的步伐加快,Docker企业版也已经支持了Swarm Mode。

Docker Swarm Mode集群和传统的Swarm集群最大的差异是利用引擎内置的集群管理能力,取消了对KV Store依赖,简化了Docker集群的创建和管理。随着商业化产品的步伐加快,Docker企业版也已经支持了Swarm Mode。今天,我们就和大家一起看一下如何利用这些最新特性在Swarm Mode集群中部署Spring Cloud应用。

极简版Spring Cloud应用

云应用(Cloud Native Application)的一个重要特点是动态。运行在云上的应用,其实例可能随时生灭,随着负载的变化,数目也会增减。为适应这个变化,应用需要借助于服务发现来相互定位。开源的微服务框架Spring Cloud中封装了Netflix的服务发现Eureka,一个极简的Spring Cloud应用可以是如下结构:

springcloud_tiny

Web应用在访问时会调用BookService,宣布两个服务都正常。

curl http://web:8080/
Web+BOOK Service Available.

Web对BookService服务调用参见ApplicationController.java代码。

    @RequestMapping("/")
    public String getIndex(){
        String message = restTemplate.getForObject("http://bookservice/",String.class);
        return "Web+" + message;
    }

可以看到restTemplate访问"http://bookservice/",从Eureka服务中检索到名为bookservice服务的所有实例地址和端口号,利用客户端负载机制选择其中一个实例进行访问。

BookService服务在启动的时候会自动向Eureka注册。Eureka Server的地址配置在application.properties文件中:

server.port=0
eureka.client.serviceUrl.defaultZone=http://${EUREKA_SERVER_ADDRESS}:8761/eureka/

bootstrap.properties文件中声明服务名:

spring.application.name=bookservice

如果大家查看Web服务的相应文件,也会看到类似的配置,只不过声明自己的服务名不同。

Spring Cloud对Eureka Server和Eureka Client做了很好的封装,一个应用只需通过如下标注即可成为Eureka Server:

...
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
   ...
}

Eureka Client的声明如下:

...
@SpringBootApplication
@EnableDiscoveryClient
public class BookserviceApplication {
   ...
}

构建镜像

构建镜像分两个步骤,Gradle编译生成Spring Boot JAR;然后利用Dockerfile创建Docker镜像。

./gradlew build
docker build -t <镜像名>:<标签> .

示例Dockerfile是针对Gradle编译出来的目录结构的。如果使用Maven编译,请更改JAR目录位置。

FROM java:8-jre-alpine
VOLUME /tmp
ADD build/libs/*.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

全部构建完成后查看新生成的Docker镜像:

$ docker image ls
REPOSITORY         TAG         IMAGE ID       CREATED      SIZE
demo-web           latest      281e25e4c72c   2 days ago   180 MB
demo-bookservice   latest      249a93dfe3c6   2 days ago   180 MB
demo-eurekaserver  latest      2cfeb50cf373   2 days ago   204 MB

在本地运行

在compose目录下有一个V3版本的部署描述文件springcloud-demo.yml。如果你的计算机上有docker-compose,可以运行如下命令启动全部服务:

$ cd compose
$ docker-compose -f springcloud-demo.yml up -d

找到Eureka和Web的所对应的端口。

$ docker-compose -f springcloud-demo.yaml ps
        Name                       Command               State            Ports
----------------------------------------------------------------------------------------
compose_bookservice_1   java -Djava.security.egd=f ...   Up
compose_eureka_1        java -Djava.security.egd=f ...   Up      0.0.0.0:8761->8761/tcp
compose_web_1           java -Djava.security.egd=f ...   Up      0.0.0.0:32771->8080/tcp

访问Eureka Server

eureka_screenshot

从上面的输出可以看到Web和BookService服务各有一个实例注册上了。下面访问Web服务:

web_screenshot

部署到Swarm Mode集群

Docker 1.12开始Swarm Mode集群模式,相关的文章可以参考云栖文章。读者登录到任意Swarm管理节点,执行部署命令。

docker stack deploy -f all-in-one.yml springcloud-demo

示例springcloud-demo.yml采用Compose V3格式,新格式和V2的差别讨论间云栖文章。我们在这里没有使用V3特有的内容,贴在这里供大家参考:

version: '3'
services:
  eureka:
    image: XXX/demo-eurekaserver
    ports:
      - "8761:8761"
  web:
    image: XXX/demo-web
    environment:
      - EUREKA_SERVER_ADDRESS=eureka
    ports:
      - "8080"
  bookservice:
    image: XXX/demo-bookservice
    environment:
      - EUREKA_SERVER_ADDRESS=eureka

部署到Docker Datacenter

Docker公司的商业版集群管理软件Docker Datacenter支持了Swarm Mode模式集群。有关Docker商业版的内容可以参考云栖文章:DockerCon2017前瞻 - Docker企业版体验

最新的Docker Datacenter 2.1上用户可以通过界面上的Compose编辑器输入Compose模版完成部署,效果和上面用docker stack命令一样。

在2.0版上没有Compose模版编辑界面,读者可以登录进入任何一个管理节点,通过命令行执行同样命令部署:

docker stack deploy -f all-in-one.yml springcloud-demo

讨论

本文的示例代码在github上。在生产环境中部署SpringCloud应用还要涉及到高可用,日志、监控等配置在以后的系列文章中会介绍相应内容,敬请关注。

Docker Swarm运行Spring Cloud(二):Eureka高可用

小结

本文讨论了如何在Docker Swarm Mode集群上部署一个Spring Cloud应用,可以看出Docker Swarm的优雅之处在于集群管理和Docker API一致以及优异的开发者体验。阿里云容器服务除了在共有云上提供了CaaS能力能力也会很快支持Swarm Mode,了解更多阿里云容器服务内容,请访问 https://www.aliyun.com/product/containerservice

相关文章
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1518 3
|
11月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
945 0
|
10月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
812 8
|
12月前
|
Java 应用服务中间件 开发者
Spring Boot 技术详解与应用实践
本文档旨在全面介绍 Spring Boot 这一广泛应用于现代企业级应用开发的框架。内容将涵盖 Spring Boot 的核心概念、核心特性、项目自动生成与结构解析、基础功能实现(如 RESTful API、数据访问)、配置管理以及最终的构建与部署。通过本文档,读者将能够理解 Spring Boot 如何简化 Spring 应用的初始搭建和开发过程,并掌握其基本使用方法。
792 2
|
12月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1608 10
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
1135 13
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
856 2
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
Java 数据库 开发者
Spring Boot 框架超级详细总结及长尾关键词应用解析
本文深入讲解Spring Boot框架的核心概念、功能特性及实际应用,涵盖自动配置、独立运行、starter依赖等优势。通过Web开发、微服务架构、批处理等适用场景分析,结合在线书店实战案例,演示项目初始化、数据库设计、分层架构实现全流程。同时探讨热部署、多环境配置、缓存机制与事务管理等高级特性,助你高效掌握Spring Boot开发技巧。代码示例详尽,适合从入门到进阶的学习者。
4347 0