gpt4 book ai didi

gradle - 使用 Gradle/Maven 的 SpringBoot 应用程序的通用 Docker 镜像和 Dockerfile

转载 作者:行者123 更新时间:2023-12-02 18:24:07 26 4
gpt4 key购买 nike

根据 https://spring.io/guides/gs/spring-boot-docker/ ,我们可以使用应用程序的硬编码名称和版本为 SpringBoot 应用程序创建 Docker 镜像。例如:

src/main/docker/Dockerfile

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

但是,更改应用程序的名称或版本会破坏您放置在 build.gradle 任务中的 Docker 构建命令。

构建.gradle

task buildDocker(type: Docker, dependsOn: build) {
push = true
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}

命令 gradle buildDocker 通过从应用暂存 Dockerfile 和可执行 Jar 并执行“docker build”来构建镜像。

问题

考虑到 Dockerfile 中的名称是静态的,我如何更改此设置以在更改版本时不破坏我的构建,甚至在构建 docker 镜像时更改我的 SpringBoot 应用程序的名称?

最佳答案

从 Dockerfile 回溯,我们可以只要求添加“app.jar”。所以,从

ADD gs-spring-boot-docker-0.1.0.jar app.jar

ADD app.jar app.jar

这导致需要重命名或复制生成的可执行Jar。此示例将可执行 jar 重命名为“app.jar”,这样可以轻松构建 docker 镜像。可以在下面找到可以复制到要在 Gradle 中构建的任何 SpringBoot 应用程序的通用任务。

构建.gradle

/**
* Generic support for building docker images for SpringBoot Apps
*/
task buildDocker(type: Docker, dependsOn: build) {
push = false
applicationName = rootProject.name
dockerfile = file('src/main/docker/Dockerfile')

doFirst {
// Rename the app jar to "app.jar" so that the Dockerfile does not require renames
copy {
from "${project.buildDir}/libs"
into stageDir
include "${rootProject.name}-${version}.jar"
rename("${rootProject.name}-${version}.jar", "app.jar")
}
}

doLast {
println "Run the Docker Container"
println "docker run -ti -p 8080:8080 $project.group/$applicationName:$version"
}
}

最终生成的Dockerfile如下:

src/main/docker/Dockerfile

FROM frolvlad/alpine-oraclejdk8:slim
MAINTAINER Marcello_deSales@intuit.com
VOLUME /tmp
ADD app.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

命令“gradle buildDocker”将生成 docker 镜像,作为奖励,它将打印完整的命令供您执行应用程序(请注意,默认端口号是硬编码的,如果您更改该值,则必须更改)。

关于gradle - 使用 Gradle/Maven 的 SpringBoot 应用程序的通用 Docker 镜像和 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com