Tag: gradle

如何构build一个Java应用程序的docker容器

我想要做的是为我的Java应用程序构build一个docker镜像,但是对于大多数编译语言来说,下面的考虑应该是真实的。 问题 在我的构build服务器上,我想为我的应用程序生成一个docker镜像作为交付物。 为此,我必须使用一些构build工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创build的JAR文件添加到泊坞窗图像中。 因为我希望Docker镜像只执行JAR文件,所以我将从已经安装了Java的基础镜像开始。 有三种方法可以做到这一点: 让构build工具控制过程 在这种情况下,我的构build工具控制整个过程。 所以它准备了JAR文件,在创buildJAR之后,它会调用Docker来创build映像。 这是因为事先创build了JAR,而Docker可能忘记了创buildJAR所需的构build过程。 但是我的Dockerfile不再是独立的。 它取决于在Docker之外发生的步骤。 在我的Dockerfile中,我将有一个COPY或ADD语句,它应该将JAR文件复制到图像中。 当事先未创buildjar时,这个语句会失败。 所以只是执行Dockerfile可能不起作用。 如果您想要使用DockerHub上的自动构buildfunction来构build使用当前Dockerfile的服务,就会成为一个问题。 让Docker控制构build 在这种情况下,创build映像所需的所有步骤都会添加到Dockerfile中,以便通过执行Docker构build来创build映像。 这种方法的主要问题是没有办法添加到Dockerfile命令,这些命令应该在创build的docker镜像之外执行。 这意味着我必须将我的源代码和构build工具添加到泊坞窗图像中,并在图像中构build我的JAR文件。 这将导致我的图像比它必须是由于所有添加的文件在运行时将是不必要的。 这也会为我的图片添加额外的图层。 编辑: 正如@ adrian-mouat指出,如果我要添加源,build立应用程序并删除一个RUN语句中的源,我可以避免添加不必要的文件和图层到Docker镜像。 这将意味着创造一些疯狂的链式命令。 两个独立的版本 在这种情况下,我们将构build分为两部分:首先,使用构build工具创buildJAR文件,并将其上传到存储库(Maven或Ivy存储库)。 然后,我们触发一个单独的Docker构build,它只是从存储库中添加JAR文件。 结论 在我看来,更好的方法是让构build工具控制过程 。 这将导致一个干净的docker形象,因为图像是我们想要传递这是重要的。 为了避免有一个潜在的不工作的Dockerfile应该被创build作为构build的一部分。 所以没有人会意外地使用它来开始一个破碎的构build。 但是这不允许我与DockerHub集成。 题 有没有另一种方法我失踪?

如何减less我的java / gradle docker镜像大小?

我有一个像下面这样的Docker文件: FROM openjdk:8 ADD . /usr/share/app-name-tmp WORKDIR /usr/share/app-name-tmp RUN ./gradlew build \ mv ./build/libs/app-name*.jar /usr/share/app-name/app-name.jar WORKDIR /usr/share/app-name RUN rm -rf /usr/share/app-name-tmp EXPOSE 8080 RUN chmod +x ./docker-entry.sh ENTRYPOINT [ "./docker-entry.sh" ] 问题是,最终的图像大小是1.1GB,我知道这是因为gradle下载和存储所有的依赖关系。 删除这些不必要的文件并保留jar的最好方法是什么?

Java操场的Gradle任务

我对Docker和Gradle还是个新手,但是我正在尝试设置一个构buildDocker镜像的Gradle构build。 我刚刚完成了一个Dockerfile设置,这个Dockerfile在本地部署并按预期运行了jar。 我有这个在我的build.gradle : buildscript { repositories { mavenCentral() } dependencies { classpath 'se.transmode.gradle:gradle-docker:1.2' } } plugins { id 'com.github.johnrengelman.shadow' version '1.2.3' } apply plugin: 'docker' jar { manifest { attributes 'Main-Class': 'com.myapp.Main' } } task buildDocker(type: Docker, dependsOn: shadowJar) { push = false applicationName = jar.baseName tagVersion = 'latest' dockerfile = file('src/main/docker/Dockerfile') copy { […]

如何cachingJenkins Docker SSH Slave(Gradle)的下载依赖关系

我们有Jenkins Docker Slave模板,成功构build了一个软件例如Gradle项目。 这是基于https://hub.docker.com/r/evarga/jenkins-slave/ )。 当我们启动docker slave时,每次构build时都会下载依赖关系。 我们想要加快构build,所以下载的依赖关系可以被相同的构build甚至其他构build重用。 有没有办法指定一个外部文件夹,以便使用caching? 还是另一个重用相同caching的解决scheme?

通过Gradle中的发布机制将Docker镜像推送到Artifactory

我们正在使用Gradle Artifactory插件将工件发布到Artifactory服务器中(另请参阅这些说明 )。 现在我们已经将任务添加到我们的Gradle脚本中来构buildDocker镜像,我们希望将这些镜像推送到我们的Artifactory(我们已经configuration为Docker存储库)中。 我已经设法使用自定义任务来做到这一点,但是我真的希望将其插入到我们当前的工作stream程中,以便gradle artifactoryPublish在将其他工件上传到存储库的同时执行此操作。 这样做的主要好处是,发布机制确保所有模块在推送之前都能成功build立,我希望能够实现这一点。 那么有没有人知道什么最好的方法是将docker push插入到Gradle Artifactory插件附带的artifactoryPublish任务中?