Ich mache ein Universitätsprojekt, bei dem wir mehrere Spring Boot-Anwendungen gleichzeitig ausführen müssen.
Ich hatte bereits einen mehrstufigen Build mit Gradle Docker-Image konfiguriert und dann die App in openjdk: jre image ausgeführt.
Hier ist meine Docker-Datei:
FROM gradle:5.3.0-jdk11-slim as builder
USER root
WORKDIR /usr/src/java-code
COPY . /usr/src/java-code/
RUN gradle bootJar
FROM openjdk:11-jre-slim
EXPOSE 8080
WORKDIR /usr/src/java-app
COPY --from=builder /usr/src/java-code/build/libs/*.jar ./app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
Ich baue und betreibe alles mit Docker-Compose. Teil von Docker-Compose:
website_server:
build: website-server
image: website-server:latest
container_name: "website-server"
ports:
- "81:8080"
Natürlich dauert der erste Bau ewig. Docker zieht alle seine Abhängigkeiten. Und damit bin ich einverstanden.
Im Moment funktioniert alles in Ordnung, aber jede kleine Änderung des Codes führt zu einer Erstellungszeit von ca. 1 Minute für eine App.
Teil des Build-Protokolls: docker-compose up --build
Step 1/10 : FROM gradle:5.3.0-jdk11-slim as builder
---> 668e92a5b906
Step 2/10 : USER root
---> Using cache
---> dac9a962d8b6
Step 3/10 : WORKDIR /usr/src/java-code
---> Using cache
---> e3f4528347f1
Step 4/10 : COPY . /usr/src/java-code/
---> Using cache
---> 52b136a280a2
Step 5/10 : RUN gradle bootJar
---> Running in 88a5ac812ac8
Welcome to Gradle 5.3!
Here are the highlights of this release:
- Feature variants AKA "optional dependencies"
- Type-safe accessors in Kotlin precompiled script plugins
- Gradle Module Metadata 1.0
For more details see https://docs.gradle.org/5.3/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileJava
> Task :processResources
> Task :classes
> Task :bootJar
BUILD SUCCESSFUL in 48s
3 actionable tasks: 3 executed
Removing intermediate container 88a5ac812ac8
---> 4f9beba838ed
Step 6/10 : FROM openjdk:11-jre-slim
---> 0e452dba629c
Step 7/10 : EXPOSE 8080
---> Using cache
---> d5519e55d690
Step 8/10 : WORKDIR /usr/src/java-app
---> Using cache
---> 196f1321db2c
Step 9/10 : COPY --from=builder /usr/src/java-code/build/libs/*.jar ./app.jar
---> d101eefa2487
Step 10/10 : ENTRYPOINT ["java", "-jar", "app.jar"]
---> Running in ad02f0497c8f
Removing intermediate container ad02f0497c8f
---> 0c63eeef8c8e
Successfully built 0c63eeef8c8e
Successfully tagged website-server:latest
Jedes Mal friert es danach ein Starting a Gradle Daemon (subsequent builds will be faster)
Ich habe darüber nachgedacht, Volumen mit zwischengespeicherten Gradle-Abhängigkeiten hinzuzufügen, aber ich weiß nicht, ob dies der Kern des Problems ist. Auch dafür konnte ich keine guten Beispiele finden.
Gibt es eine Möglichkeit, den Build zu beschleunigen?