Der erste Schritt nach dem Erstellen der Vaadin-App im letzten Beitrag Hallo Vaadin war, ein Docker-Image dafür zu erstellen.
Da ein gutes Gradle-Plugin zur Verwaltung von Docker verfügbar ist, war es nicht viel Arbeit, das Image zu erstellen.
Als Basis-Image entschied ich mich für das offizielle Jetty-Image und baute das Image, indem ich die WAR-Datei meiner Anwendung hinzufügte.
Meine build.gradle aus dem letzten Beitrag wuchs ein wenig zu
buildscript {
repositories {
jcenter()
}
dependencies {
// https://github.com/bmuschko/gradle-docker-plugin
classpath 'com.bmuschko:gradle-docker-plugin:3.0.6'
}
}
plugins {
id "fi.jasoft.plugin.vaadin" version "1.1.10"
}
apply plugin: 'com.bmuschko.docker-java-application'
apply plugin: 'com.bmuschko.docker-remote-api'
import com.bmuschko.gradle.docker.tasks.image.Dockerfile
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
task createDockerfile(type: Dockerfile) {
destFile = project.file('./build/Dockerfile')
from 'jetty:9'
maintainer 'The Dude <thedude@email.com>'
addFile "./libs/hello-vaadin.war", "/var/lib/jetty/webapps/"
}
task buildImage(type: DockerBuildImage) {
inputDir = createDockerfile.destFile.parentFile
tag = 'thedude/hello-vaadin:1.0'
}
task pushImage(type: DockerPushImage) {
imageName = "thedude/hello-vaadin"
tag = '1.0'
}
createDockerfile.dependsOn war
buildImage.dependsOn createDockerfile
pushImage.dependsOn buildImage
Zwei Schritte bleiben: das Image bauen und den entsprechenden Container ausführen.
Das Image bauen ist einfach gradle buildImage und es ausführen mit
docker run -ti -p 8888:8080 thedude/hello-vaadin:1.0
Dann im Browser unter http://localhost:8888/hello-vaadin/ überprüfen.
Wenn alles gut aussieht, pushe das Image mit gradle pushImage.
Das war’s für heute!