Je suis encore novice en matière de Docker et de Gradle, mais j'essaie de mettre en place un build Gradle qui construit une image Docker.
Je viens de terminer la mise en place d'un Dockerfile
qui déploie et exécute localement le jar comme prévu. J'ai ceci dans mon 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 {
from shadowJar
into stageDir
}
}
Je cours ./gradlew build buildDocker
pour construire l'image. J'en suis satisfait jusqu'à présent.
En général, je crée une classe jetable (par ex. Playground.java
) avec un main
que je peux exécuter et ignorer. Habituellement, je l'exécute dans l'IDE, mais maintenant je voudrais pouvoir me connecter aux autres conteneurs Docker que je sais être en cours d'exécution.
Je sais que je pourrais essayer de modifier le sourceSets
J'utilise en excluant com.myapp.Main
mais j'imaginais qu'il pourrait y avoir une solution plus élégante qui ressemblerait à celle-ci :
task buildDockerPlayground(type: Docker, dependsOn: shadowJar) {
main = 'com.myapp.Playground'
push = false
applicationName = jar.baseName
tagVersion = 'latest'
dockerfile = file('src/main/docker/Dockerfile')
copy {
from shadowJar
into stageDir
}
}
Une autre approche pourrait être d'avoir une autre tâche que j'utilise pour remplacer la tâche build
lorsque j'appelle ./gradlew build buildDocker
, par exemple ./gradlew playground buildDocker
. Est-ce plus pratique ?