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

Arun Gupta在2015年JavaLand大会上,展示了多种使用Docker和Kubernetes部署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进行通信。

除此之外的方法还包括使用Fig和Docker 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

感谢邵思华对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Arun Gupta:使用Docker和Kubernetes部署Java EE应用的方法)