java - 通过maven插件生成docker镜像

标签 java maven docker tomcat

我已经手动编写了 dockerfile,但现在我需要配置 maven 来创建该文件并构建镜像。我正在尝试使用 Spotify 的 Maven 插件来做到这一点。

这是我编写的 dockerfile,它可以工作:

FROM tomcat:8.0-jre8
RUN rm -rvf /usr/local/tomcat/webapps/ROOT
COPY ./context.xml /usr/local/tomcat/conf/
COPY /target/brainis-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]
EXPOSE 8080

我需要确保我的 Maven 插件在构建镜像之前生成相同的 docker 文件。你能告诉我如何实现它吗?我当前的配置仅生成第一个命令 FROM tomcat:8.0-jre8,如何在 maven 中配置该文件的其余部分?

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
        <imageName>spring-tomcat</imageName>
        <baseImage>tomcat:8.0-jre8</baseImage>
    </configuration>
</plugin>

最佳答案

您需要将 Dockerfile 添加到代码库,即 /src/main/docker/Dockerfile 并通过以下方式从 Spotify 的 Maven 插件引用它:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>${docker.plugin.version}</version>
    <configuration>
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.war</include>
            </resource>
        </resources>
    </configuration>
</plugin>

最后一部分,资源,将 docker 构建基本路径放置在您想要的任何文件夹中,即 /target 以及要包含的文件。

这将运行整个 Dockerfile 脚本

关于java - 通过maven插件生成docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50905290/

相关文章:

java - 回复 : JavaFX - Background Thread for SQL Query

maven - IntelliJ 将本地 Maven 存储库中的所有 jar 下载到 system/jars 文件夹

spring-boot - 我应该选择哪个平台为我的微服务端项目安装一些环境?

mysql - docker compose 上的 Keycloak + mysql。没有保存数据

macos - 使用 Intellij IDEA 重新加载远程 Spring Boot 应用程序的异常

java - 不同类中的方法之间的 "share"变量的正确方法是什么?

java - NetBeans GUI 生成器镜像

java - 测量特定监视器上的线程争用

maven-2 - 生成具有不同/过滤类的多个 jar 的 Maven 最佳实践?

java - Jenkins 。如何在每次构建期间停止运行测试?