Dockerizing 多模块 Spring 使用 JIB 插件启动应用程序
Dockerizing multi module Spring Boot application using JIB plugin
我有一个 Spring 引导应用程序并使用 spotify 插件对我的 application.So 进行 Dockerize,我将有一个如下所示的 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 compile jib:build
我看到了以下内容。
[INFO] 构建依赖层...
[INFO] 建筑 类 层...
[INFO] 构建资源层...
当我 运行 docker 图像时,它说,Jar 文件不存在。我有一个多模块 Maven 项目,想 dockerize 多个模块 运行ning mvn compile jib:build 来自父 pom。有什么帮助吗?
尝试更改 Dockerfile 中的 COPY 行
至
COPY target/service.war /opt/service/service.war
顺便说一句
您可以在 Dockerfile 中使用 WORKDIR 指令来使用相对路径
确实如此。 JIB 不需要 Dockerfile
或 dockerd
。
下面分享一个例子,你可以把它复制到你的 pom.xml
的 plugins
部分
<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
通过使用 jib maven 插件,您无需编写 docker 文件,jib 直接为您构建图像而无需公开 docker 文件。
我认为在您的 pom.xml 中将包装从 'war' 切换为 'jar'
足以让你运行成功
mvn compile jib:build
(如果 docker.hub.com/test/service 是私有存储库,将失败,在这种情况下,您需要切换到 public 或提供您的凭据)
jib:build 将尝试将图像推送到某个存储库。
如果你只需要构建你需要使用
mvn jib:dockerBuild
对于多模块项目,只需在子项目中相应地配置插件,如下所示:
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
我有一个 Spring 引导应用程序并使用 spotify 插件对我的 application.So 进行 Dockerize,我将有一个如下所示的 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 compile jib:build
我看到了以下内容。
[INFO] 构建依赖层... [INFO] 建筑 类 层... [INFO] 构建资源层...
当我 运行 docker 图像时,它说,Jar 文件不存在。我有一个多模块 Maven 项目,想 dockerize 多个模块 运行ning mvn compile jib:build 来自父 pom。有什么帮助吗?
尝试更改 Dockerfile 中的 COPY 行 至
COPY target/service.war /opt/service/service.war
顺便说一句 您可以在 Dockerfile 中使用 WORKDIR 指令来使用相对路径
确实如此。 JIB 不需要 Dockerfile
或 dockerd
。
下面分享一个例子,你可以把它复制到你的 pom.xml
plugins
部分
<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
通过使用 jib maven 插件,您无需编写 docker 文件,jib 直接为您构建图像而无需公开 docker 文件。
我认为在您的 pom.xml 中将包装从 'war' 切换为 'jar'
足以让你运行成功
mvn compile jib:build
(如果 docker.hub.com/test/service 是私有存储库,将失败,在这种情况下,您需要切换到 public 或提供您的凭据)
jib:build 将尝试将图像推送到某个存储库。 如果你只需要构建你需要使用 mvn jib:dockerBuild
对于多模块项目,只需在子项目中相应地配置插件,如下所示:
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>