Dev > CaaS > Kubernetes > TAP

Build a Spring Boot app with a Dockerfile to deploy to Tanzu Application Platform

Created on Tue Aug 01 2023 • Last Updated on Tue Aug 01 2023N/A Views

🏷️ Kubernetes | Docker | Tanzu | TAP | Spring Boot

Tanzu Application Platform uses Cloud Native Buildpacks by default when creating application container images.
You can also use Docker to build Docker images.

Recommendations on how to write a Dockerfile for Spring Boot apps can be found in the following document.


The Dockerfile described in the document assumes that the jar has already been built, but since there is only the source code on the Tanzu Application Platform,
I need to build a jar file from source code when docker build. Also, runAsUser: 1000 is set at runtime, so switch to the user with uid 1000.

Based on the above, if you write a Dockerfile, it will be as follows.

FROM eclipse-temurin:17-jdk as builder
WORKDIR application
ADD ./.mvn .mvn/
ADD ./mvnw mvnw
ADD ./pom.xml pom.xml
ADD ./src src/
RUN ./mvnw -V clean package -DskipTests --no-transfer-progress && \
    cp target/*.jar application.jar && \
    java -Djarmode=layertools -jar application.jar extract

FROM eclipse-temurin:17-jre
ARG UID=1000
ARG GID=1000
WORKDIR application
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID $USERNAME
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

When deploying, if you specify --param dockerfile=<Dockerfile path on repository> as follows, a container image will be built using Dockerfile.

tanzu apps workload apply rest-service \
  --app rest-service \
  --git-repo https://github.com/making/rest-service \
  --git-branch main \
  --type web \
  --param dockerfile=./Dockerfile \
  -n demo \

Unlike when creating a container image with Paketo Buildpacks / Tanzu Buildpacks, the JVM memory size is not automatically set, so
Note that you need to configure the JVM with the runtime environment variable JAVA_TOOL_OPTIONS if necessary.

Found a mistake? Update the entry.