如果你的机器之前没有安装过Docker,那么首先你需要安装Docker。你可以使用是最新版本的linux,它已经集成了Docker,或者使用安装命令:
在Mac和windows系统上,则需安装 boot2docker ,它是一个微内核的linux虚拟机包含Docker主机。同时你需要配置ssh秘钥和证书。 幸运的是,Docker Machine. 使用非常简单。你从头开始到创建完成一个Docker主机只需要一条指令。这个主机可以创建在你的便携设备上、云端或数据中心。在多个服务器上安装Docker,Docker客户端可以传输配置。 关于这方面的详细讲解请关注:Docker Machine to Setup Docker Host. |
第 2 种 Docker 方法:应用服务器+内存数据库
|
1
|
docker run -it -p 8080:8080 arungupta /javaee7-hol |
如果你想运行一个典型的WildFly加H2内存数据库的Java EE 7应用,那么这种Docker方法的详细解释见Java EE 7 Hands-on Lab on WildFly and Docker。
第3种 Docker方法 : 两个容器在相同的主机使用链接前一种方法能够让你快速上手,但是很快出现了瓶颈-数据库只能在内存中。这就意味着你更改任何数据和 schema 在应用服务关闭后都将要失效。在这种情况下,你需要使用应用服务器意外的数据库服务器。例如,MySQL 数据库服务器和 WildFly 应用服务器。 简单起见,数据库服务器和应用程序服务器可以在同一个主机上运行。
Docker Container Links 被用来链接两个容器。在资源容器和目标容器间创建管道链接并且能够保证数据在两个容器间安全传输。 在我们的案例中,目标容器(WildFly)可以看到资源信息(MySQL)。重点需要理解是在资源容器中不需要公开任何信息,仅仅是在目标容其中可见。 启动 MySQL 和 WildFly 容器并且添加链接:
|
第 4 种 Docker 方法:在同一宿主上的两个容器使用 Fig 进行通信上一种方法要求你以特定的次序运行容器。如果应用程序的每一层都位于一个容器里,那么运行多容器应用程序就很快变得富有挑战性。Fig(已被 Docker Compose 取代)是一款具有以下特征的 Docker 编排工具:
下面的配置文件就是 Fig 的入口:
所有的容器可以这样来启动:
使用 Fig 编排 Docker 详细阐述了这种方法。 现在 Fig 只接受更新,它的代码是 Docker Compose 的基础。相关讲解参见下一种方法。 |
第5种Docker方法:在同一宿主上的两个容器使用Compose进行通信Docker Compose是一种在Docker上定义和运行复杂应用程序的工具。通过Compose,你在单独的文件中定义一个多容器应用程序,只需执行一个命令就能让你的应用程序运行起来。 应用程序的配置文件格式和Fig所用的一致。这些容器可以这样启动:
对这个方法的详细讲解参见使用Docker Compose组织容器。 |
第6种Docker方法:在不同宿主上的两个容器使用IP地址进行通信在前一个方法中,两个容器运行在同一个宿主上。它们俩可以使用Docker linking方便地互相通信。但是简单的容器级linking不允许跨宿主通信。 在同一个宿主上运行容器意味着你无法扩展每一层,数据库属于独立的一层,应用服务器也属于独立的一层。在这种情况下,你需要在不同的宿主上运行每个容器。 MySQL容器可以这样启动:
JDBC资源可以这样创建:
WildFly容器可以这样启动:
对这个方法的完整阐述参见在多个宿主之间使用Docker容器的linking技术。 |
第7种Docker方法:使用Docker Swarm管理不同宿主上的两个容器Docker Swarm是Docker的原生集群管理工具。它将一群Docker宿主变为单一的虚拟宿主。通过优化宿主资源利用率,提供故障转移服务,它弥补了Docker Machine的不足。具体地说,Docker Swarm允许用户将运行着Docker守护进程的宿主组建为资源池,并在此之上调度Docker容器的运转,自动管理工作负载的分配,维护集群的状态。 关于这个方法的更多详情将在后续博客中介绍。 |
第8种Docker方法:从Eclipse部署Java EE应用程序这个压轴方法将教你如何把已有的应用程序部署到一个Docker镜像中。 假定你将JBoss Tools作为你的开发环境,WildFly用作你的应用服务器。 这里提供两条途径来部署这些应用程序: 1) 基于 Docker volumes + 本地 的部署方式:在你本地计算机上有一个目录,正以Docker Volume的形式挂载着。通过将这个目录映射到用于部署的目录,WildFly Docker容器被这样启动起来:
通过设置JBoss Tools将WAR文件部署到这个目录中。 2) 基于 WildFly管理API + 远程 的部署方式:启动WildFly Docker容器,此外还要开放管理端口9990:
通过设置JBoss Tools来使用远程的WildFly服务器,并利用管理API来进行部署。 对这个方法的详细讲解在从Eclipse部署到WildFly和Docker上中可以找到。 |
第9种Docker方法:使用Arquillian Cube测试Java EE应用程序Arquillian Cube允许你以手动或自动的方式,在测试的生命周期中,控制Docker镜像的生命周期。Cube利用Docker REST API与容器通信。它使用远程适配器API同应用服务器通信,比如这里用到的WildFly。Docker参数是作为maven-surefire-plugin的一部分来配置的:
关于这个方法的完整详情可以在使用Arquillian Cube在Docker上运行Java EE测试中找到。 在Docker上部署你的Java EE应用程序时,你还用了什么其他方法吗? 欢迎尝试这些方法! |
文章转载自:开源中国社区 [http://www.oschina.net]
本文标题:为 Java EE 应用提供的 9 种 Docker 方法
本文地址:http://www.oschina.net/translate/9-docker-recipes-for-java-ee-applications
参与翻译:霍啸林, 伯松, 吴利明, BillHan
英文原文:9 Docker Recipes for Java EE Applications