Java EE 应用程序通常使用 Maven 构建和打包。例如, github.com/javaee- samples/javaee7-docker-maven 是一个简单的 Java EE 7 应用程序并显示了 Java EE 7 依赖项:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
以及编译源代码和构建 WAR 文件的两个 Maven 插件:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
然后可以使用 wildfly-maven-plugin 将该应用程序部署到 Java EE 7 容器,例如 WildFly :
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
可以使用 Arquillian 调用测试,同样使用 Maven。因此,如果您要将此应用程序打包为 Docker 映像并在 Docker 容器中运行它,则应该有一种机制可以无缝集成到 Maven 工作流中。
Docker Maven 插件
认识 docker-maven-plugin !
此插件允许您从
pom.xml
管理 Docker 图像和容器。它带有预定义的目标:
目标描述
docker:start
创建并启动容器
docker:stop
停止并销毁容器
docker:build
构建图像
docker:push
将图像推送到注册表
docker:remove
从本地 docker 主机中删除图像
docker:logs
显示容器日志
Introduction 提供了对插件的高级介绍,包括构建图像、运行容器和配置。
使用 Maven 将 Java EE 7 应用程序作为 Docker 容器运行
TLDR;
- 按照 Docker 机器中的说明创建和配置 Docker 机器以设置 Docker 主机
-
将工作区克隆为:
git clone https://github.com/javaee-samples/javaee7-docker-maven.git
-
将 Docker 镜像构建为:
mvn package -Pdocker
-
运行 Docker 容器:
mvn install -Pdocker
-
找出 Docker Machine 的 IP 地址为:
docker-machine ip mydocker
-
访问您的应用程序
<dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies>
Docker Maven 插件配置
让我们更深入地了解我们的示例应用程序。
pom.xml
更新为包含
docker-maven-plugin
作为:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
每个图像配置都包含三个部分:
- 图像名称和别名
-
<build>
定义图像的创建方式。此处指定要包含在映像中的基础映像、构建工件及其依赖项、要公开的端口等。 程序集描述符格式 用于指定要包含的工件,定义在src/main/docker
目录中。我们案例中的assembly.xml
如下所示:
<dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies>
-
<run>
定义容器的运行方式。这里指定了需要暴露的端口。
此外,
package
阶段与
docker:build
目标相关联,
install
阶段与
docker:start
目标相关联。
有四个 docker-maven-plugin,您可以在 枪战 中阅读更多详细信息,了解最适合您的目的。
您如何从现有应用程序创建 Docker 镜像?