Arun Gupta:使用Docker和Kubernetes部署Java EE应用的方法

jopen 9年前

原文  http://www.infoq.com/cn/news/2015/04/gupta-javaee-docker-kubernetes


Arun Gupta 在2015年 JavaLand 大会上,展示了多种使用 DockerKubernetes 部署 Java EE 应用的方法。Gupta讲述了容器对于部署和管理应用的优势,容器具备快速部署、隔离性和可移植性等优点。使用容器集群管理系统,比如Kubernetes,可以将Docker容器相关的管理作为唯一单位,简化了跨主机通信的实现,保证了可用性和可扩展性。

Red Hat软件 的开发者宣传董事Gupta,在JavaLand的演讲首先介绍了 Docker ,开源项目Docker可用于基于(LXC)[https://linuxcontainers.org/] 软件容器 应用的自动部署。使用Docker胜于更传统的部署机制之处包括更快的部署、隔离性、可移植性、限制资源使用的能力,以及提供安全沙箱。

接下来,Gupta演示了九种使用Docker打包和部署Java EE应用的 方法 。这些方法包括使用 Docker Machine 安装Docker、运行在单个Docker容器内的 WildFly Java EE应用服务器使用 H2 内存数据库,以及分别在两个容器中部署应用服务器和数据库并通过 容器的link 进行通信。

除此之外的方法还包括使用 FigDocker Compose 这两种编排工具定义多应用和多容器环境。Gupta还演示了如何在为服务发现预配置IP地址的两台主机上部署容器,以及如何使用 Eclipse IDE管理基于Docker的开发阶段的部署。在整个介绍的最后部分,Gupta概述了 Arquillian Cube 的使用,通过Maven构建工具的 surefire-plugin 插件,在测试生命周期内控制Docker镜像的生命周期。

接下来,Gupta的演示探讨了使用Google的 Kubernetes 集群管理系统,部署和管理Java EE应用。Kubernetes是一种Docker容器的开源编排系统,其 核心概念 包括:pod,用于组合在一起将容器编组,以便共享IP和存储卷;service,用于为pod集合提供唯一不变的名称,还可以用作负载均衡;replication controller,用于管理pod的生命周期并确保任何时间正在运行的service数量不低于预定值。

Gupta演示了基于Kubernetes的 方法 ,包括使用 Vagrant 以加载并运行本地Kubernetes开发环境集群,WildFly应用服务器service的创建以及与MySQL service的通信,还有使用replication controller确保运行指定数量的应用服务器service。

Gupta表示Docker和Kubernetes是有益于部署和管理Java EE应用的工具。 除了上面提及的Docker的优点之外,Kubernetes还可以将Docker容器相关的管理作为唯一单位,有助于跨主机通信,并且通过自动化部署和监控pod及其跨主机的复本,从而保证了可用性和可扩展性。

这种方式的潜在缺点包括,在Docker中没有包含更高级别的加载或者使用情况追踪能力(但是通过额外的工具可以实现),使用Kubernetes部署应用有可能会导致复杂的生命周期,包括构建、部署、管理和升级(包括改造已有应用支持这一过程)。

前述方法的更多信息和全部细节详见Gupta的博客 Miles to go 2.0和他帐号下的 slideshare 。JavaLand是在德国布吕尔召开的年度Java大会,详情参见 JavaLand事件网站

查看英文原文: Arun Gupta: Recipes for Deploying Java EE Apps with Docker and Kubernetes