2

我有一个 Spring Boot 应用程序并使用 spotify 插件对我的应用程序进行 Docker 化。所以,我将有一个像下面这样的 Dockerfile。

FROM jdk1.8:latest  

RUN mkdir -p /opt/servie

COPY target/service.war /opt/service

ENV JAVA_OPTS="" \
    JAVA_ARGS=""

CMD java ${JAVA_OPTS} -jar /opt/service/service.war ${JAVA_ARGS}

我遇到了 JIB,它看起来真的很酷。但是,努力让它工作。

我在下面添加了 pom 条目。

<plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>0.9.6</version>
        <configuration>
          <from>
            <image>jdk1.8:latest</image>
          </from>
          <to>
            <image>docker.hub.com/test/service</image>
          </to>
        </configuration>
      </plugin>

mvn 编译 jib:build

我看到以下内容。

[INFO] 构建依赖层... [INFO] 构建类层... [INFO] 构建资源层...

当我运行 docker 映像时,它说 Jar 文件不存在。我有一个多模块 maven 项目,并希望在从父 pom 运行 mvn compile jib:build 时对多个模块进行 dockerize。对此有什么帮助吗?

4

4 回答 4

5

确实是的。JIB不需要Dockerfiledockerd.

下面分享一个例子,你可以把它复制到plugins你的部分pom.xml

<plugin>  
    <groupId>com.google.cloud.tools</groupId>  
    <artifactId>jib-maven-plugin</artifactId>  
    <version>0.9.7</version>  
    <configuration>  
    <allowInsecureRegistries>true</allowInsecureRegistries>  
    <from>  
        <image>gcr.io/distroless/java</image>  
    </from>  
    <to>  
    <!-- make sure you already have created a project at Google Cloud Platform, see https://cloud.google.com/container-registry/ -->  
        <image>gcr.io/my-gcp-project/${project.artifactId}:${project.version}</image>  
        <credHelper>gcr</credHelper>  
    </to>  
    <container>  
        <jvmFlags>  
            <jvmFlag>-Xms256m</jvmFlag>  
            <jvmFlag>-Xmx512m</jvmFlag>  
            <jvmFlag>-Xdebug</jvmFlag>  
            <jvmFlag>-XX:+UnlockExperimentalVMOptions</jvmFlag>  
            <jvmFlag>-XX:+UseCGroupMemoryLimitForHeap</jvmFlag>  
        </jvmFlags>  
        <mainClass>learnmake.microservices.RunApplication</mainClass>  
        <ports>  
            <port>8080</port>  
            <!-- <port>4000-4004/udp</port> -->  
        </ports>  
        <format>OCI</format>  
        <!-- OR <format>Docker</format> -->  
        <useCurrentTimestamp>true</useCurrentTimestamp>  
      </container>  
    </configuration>  
</plugin>   

有关更详细的示例,请参阅learnmake-microservices

于 2018-08-06T10:08:13.340 回答
0

尝试将 Dockerfile 中的 COPY 行更改为

COPY target/service.war /opt/service/service.war

顺便说一句,您可以在 Dockerfile 中使用 WORKDIR 指令来使用相对路径

于 2018-07-17T05:57:19.107 回答
0

通过使用 jib maven 插件,您无需编写 docker 文件,jib 直接为您构建图像,而无需暴露 dockerfile。

我认为在你的 pom.xml 中将包装从“war”切换到“jar”

足以让你成功运行

mvn compile jib:build

(如果 docker.hub.com/test/service 是私有存储库,则会失败,在这种情况下,您需要切换到公共存储库或提供您的凭据)

于 2018-10-23T15:55:13.670 回答
0

jib:build 将尝试将图像推送到某个 repo。如果只需要构建,则需要使用 mvn jib:dockerBuild

对于多模块项目,只需在子项目中相应地配置插件,如下所示:

<executions>
    <execution>
        <phase>package</phase>
            <goals>
                <goal>dockerBuild</goal>
            </goals>
        </execution>
</executions>
于 2020-07-20T12:46:38.457 回答