认识 Docker Maven 插件!
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
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 镜像?