Arun Gupta:使用Docker和Kubernetes部署Java EE應用的方法
原文 http://www.infoq.com/cn/news/2015/04/gupta-javaee-docker-kubernetes
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