maven - 如何为docker配置Maven/Spring Boot项目pom.xml?

标签 maven spring-boot docker

我正在尝试通过Maven对我的SpringMVC应用程序进行docker化。我的意图是拥有一张图像,然后可以继续通过Web浏览器显示和显示该图像。

不幸的是,in following this guide似乎仍然缺乏关于实现该目标我必须进行的pom.xml编辑以及Dockerfile的关键理解。

======

这是Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

======

这是最新版本的source code's pom.xml

======

这是我在上面引用的SpringIO指南的example pom.xml之后进行的最新修订(不包括依赖项)。
<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.davidonus</groupId>
    <artifactId>davidonusSpringDemo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- tag::packaging[] -->
    <packaging>jar</packaging>
    <name>davidonusSpringDemo1</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <!-- tag::docker[] -->
        <docker.image.prefix>springio</docker.image.prefix>
    </properties>

    <profiles>
        <profile>
            <id>DavidSpringTime</id>
        </profile>
    </profiles>


    <build>


        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.9</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->

            <!-- tag::unpack[] -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unpack</id>
                        <phase>package</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>${project.groupId}</groupId>
                                    <artifactId>${project.artifactId}</artifactId>
                                    <version>${project.version}</version>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- end::unpack[] -->
        </plugins>
    </build>


这是我现在的结果,使用命令mvn install build:docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  12.050 s
[INFO] Finished at: 2019-06-15T13:24:01-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:3.1.1:unpack (unpack) on project davidonusSpringDemo1: Unable to update Marker timestamp: /home/david/Desktop/DevOps2019/springBoot/teluskoSpringBoot/target/dependency-maven-plugin-markers/com.davidonus-davidonusSpringDemo1-jar-0.0.1-SNAPSHOT.marker: Unable to update last modified timestamp on marker file /home/david/Desktop/DevOps2019/springBoot/teluskoSpringBoot/target/dependency-maven-plugin-markers/com.davidonus-davidonusSpringDemo1-jar-0.0.1-SNAPSHOT.marker -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException


======

总之,given my original pom.xml您将实现哪些更改,以使我的SpringBoot + Maven项目可部署为Docker镜像和容器?

此外,您是否会对我的Dockerfile进行修改?感谢您的咨询。谢谢。

最佳答案

如果您已经使用pom.xml准备了springboot代码。然后按照以下步骤容器化您的应用程序。

  • git clone https://github.com/dnmorris7/teluskoSpringBoot(我正在克隆您的springboot代码)
  • git checkout module5(已 check out module5分支)
  • 在git代码库中创建的Dockerfile,内容如下:
  • FROM maven:3.6-jdk-8-slim AS build
    COPY . /usr/src/app/
    WORKDIR /usr/src/app/
    RUN mvn -f /usr/src/app/pom.xml clean package
    
    FROM java:8-alpine
    WORKDIR /
    COPY --from=build /usr/src/app/target/*.jar /app.jar
    CMD java -jar app.jar
    

    注:我正在使用docker多阶段构建,其中在第一个步骤中,maven生成了jar,在第二阶段中,我们将该jar复制到了Java镜像中。
  • 现在构建您的docker镜像docker build -t appimage:v1 .
  • 运行您的docker容器docker run -it -d -p 9090:9090 appimage:v1
  • 点击api以检查其是否正常。
  • $ curl localhost:9090/home
    {"timestamp":"2019-06-16T05:34:26.655+0000","status":404,"error":"Not Found","message":"/pages/home.jsp","path":"/home"}
    

    请输入正确的基本网址,我尝试了/home
    注:如果要提供自己的自定义application.properties,则将java -jar中的Dockerfile命令更改为CMD java -jar app.jar --spring.config.additional-location=application.properties,并将docker run命令更改为docker run -it -d -v application.properties:/application.properties -p 9090:9090 appimage:v1,其中application.properties是您从外部提供的命令。

    关于maven - 如何为docker配置Maven/Spring Boot项目pom.xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56612726/

    相关文章:

    java - 使用 HttpComponentsClientHttpRequestFactory 在 RestTemplateBuilder 中添加自定义 ClientHttpRequestInterceptor

    docker - Dockerfile必要吗?建议吗?

    mongodb - Docker mongo image 始终将数据保存在/data/db 目录中

    java - EclipseLink 从 Maven 项目中的数据库中选择实体

    GWT 模块可能需要(重新)编译 REDUX

    docker - 如何在 Jenkins Docker 的目录名称中使用带有重音符号的 Maven 程序集?

    java - Spring Boot OAuth2 `AbstractTokenGranter.validateGrantType()` 方法中发生了什么?

    java - 不支持的仪表版本 : This veuge Inrsion of Gatellij plugin only works with Gauge version >= 0. 9.0,规范文件步骤显示未实现

    java - 使用 Spring Boot 和 Thymeleaf 发送 HTML 电子邮件

    jenkins - Jenkins-Docker集成-使用Jenkins构建Docker镜像并推送到注册表