1

Gemäß https://spring.io/guides/gs/spring-boot-docker/ können wir Docker Images für SpringBoot-Anwendungen mit fest codierten Namen und Version der Anwendung erstellen. Zum Beispiel:Generisches Docker Image und Dockerfile für SpringBoot Apps mit Gradle

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"] 

jedoch den Namen oder die Version der App zu ändern bricht die Docker Befehl erstellen, die Sie in Ihrer build.gradle Aufgabe stellen.

build.gradle

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

Der Befehl Gradle buildDocker ein Bild erstellt, indem die Dockerfile und die ausführbare Jar aus der App Staging und "Andockfensters build" ausführt.

Frage

Betrachtet man die Namen statisch sind in Dockerfile, Wie kann ich diese Einstellung ändern, nicht meine zu brechen baut, sobald ich die Version zu ändern, oder sogar den Namen meiner SpringBoot Anwendung, wenn das Bild Docker bauen?

Antwort

0

Backtracking von der Dockerfile, wir könnten nur erfordern, "app.jar" hinzuzufügen. Also, von

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

zu

ADD app.jar app.jar 

Dies führt zu der Notwendigkeit der Umbenennung oder Kopieren der erzeugten ausführbaren Jar. In diesem Beispiel wird das ausführbare jar in "app.jar" umbenannt, sodass das Docker-Image einfach erstellt werden kann. Eine generische Aufgabe, die in jede SpringBoot-App kopiert werden kann, die in Gradle erstellt werden soll, finden Sie weiter unten.

build.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" 
    } 
} 

Der letzte resultierende Dockerfile ist wie folgt:

src/main/Andockfensters/Dockerfile

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

Der Befehl "Gradle buildDocker" Andockfensters Bilder erzeugen und als Bonus wird der komplette Befehl für Sie ausgedruckt, um die App auszuführen (beachten Sie, dass die Standardportnummer fest codiert ist und geändert werden muss, wenn Sie diesen Wert ändern).