认识 Docker Maven 插件!

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

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;

  1. 按照 Docker 机器中的说明创建和配置 Docker 机器以设置 Docker 主机
  2. 将工作区克隆为: git clone https://github.com/javaee-samples/javaee7-docker-maven.git
  3. 将 Docker 镜像构建为: mvn package -Pdocker
  4. 运行 Docker 容器: mvn install -Pdocker
  5. 找出 Docker Machine 的 IP 地址为: docker-machine ip mydocker
  6. 访问您的应用程序
    
     <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 镜像?

相关文章