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!