From 226efddde0d6570dd721c85132681835dfd512a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sat, 12 Apr 2025 23:03:15 +0300 Subject: [PATCH 1/9] Add fist dockerize attempt for rest-api app --- modules/rest-api/Dockerfile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 modules/rest-api/Dockerfile diff --git a/modules/rest-api/Dockerfile b/modules/rest-api/Dockerfile new file mode 100644 index 0000000..7a1f42e --- /dev/null +++ b/modules/rest-api/Dockerfile @@ -0,0 +1,14 @@ +FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +LABEL authors="gpspatacean" + +WORKDIR /app +COPY pom.xml . +COPY modules modules + +RUN mvn clean package -pl modules/rest-api -am -B -e -DskipTests + +FROM eclipse-temurin:21-jre +WORKDIR /app +COPY --from=BUILDER /app/modules/rest-api/target/*.jar /app/app.jar + +ENTRYPOINT ["java", "-jar", "/app/app.jar"] From cd70b43a22600cf2fcb9c31eeb716f1f3da5b08c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 13 Apr 2025 23:10:59 +0300 Subject: [PATCH 2/9] Add webapp dockerfile; do not use relative paths, but specify build context --- modules/rest-api/Dockerfile | 2 ++ modules/webapp/Dockerfile | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 modules/webapp/Dockerfile diff --git a/modules/rest-api/Dockerfile b/modules/rest-api/Dockerfile index 7a1f42e..351187b 100644 --- a/modules/rest-api/Dockerfile +++ b/modules/rest-api/Dockerfile @@ -11,4 +11,6 @@ FROM eclipse-temurin:21-jre WORKDIR /app COPY --from=BUILDER /app/modules/rest-api/target/*.jar /app/app.jar +EXPOSE 8080 + ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/modules/webapp/Dockerfile b/modules/webapp/Dockerfile new file mode 100644 index 0000000..d28a7c9 --- /dev/null +++ b/modules/webapp/Dockerfile @@ -0,0 +1,16 @@ +FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +LABEL authors="gpspatacean" + +WORKDIR /app +COPY pom.xml . +COPY modules modules + +RUN mvn clean package -pl modules/webapp -am -B -e -DskipTests + +FROM eclipse-temurin:21-jre +WORKDIR /app +COPY --from=BUILDER /app/modules/webapp/target/*.jar /app/app.jar + +EXPOSE 8081 + +ENTRYPOINT ["java", "-jar", "/app/app.jar"] From ea143e5f38509621d6b3345784b405a63541327d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Thu, 1 May 2025 20:36:17 +0300 Subject: [PATCH 3/9] Enable 3 stages docker builds Use dedicated dependencies layer --- modules/rest-api/Dockerfile | 11 +++++++++++ modules/webapp/Dockerfile | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/modules/rest-api/Dockerfile b/modules/rest-api/Dockerfile index 351187b..0cf0ede 100644 --- a/modules/rest-api/Dockerfile +++ b/modules/rest-api/Dockerfile @@ -1,7 +1,18 @@ +FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +WORKDIR /app +COPY pom.xml . +COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml +COPY modules/core/pom.xml modules/core/pom.xml +COPY modules/rest-api/pom.xml modules/rest-api/pom.xml +COPY modules/webapp/pom.xml modules/webapp/pom.xml + +RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core + FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER LABEL authors="gpspatacean" WORKDIR /app +COPY --from=DEPENDENCIES /root/.m2 /root/.m2 COPY pom.xml . COPY modules modules diff --git a/modules/webapp/Dockerfile b/modules/webapp/Dockerfile index d28a7c9..c6a7ed4 100644 --- a/modules/webapp/Dockerfile +++ b/modules/webapp/Dockerfile @@ -1,7 +1,18 @@ +FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +WORKDIR /app +COPY pom.xml . +COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml +COPY modules/core/pom.xml modules/core/pom.xml +COPY modules/rest-api/pom.xml modules/rest-api/pom.xml +COPY modules/webapp/pom.xml modules/webapp/pom.xml + +RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core + FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER LABEL authors="gpspatacean" WORKDIR /app +COPY --from=DEPENDENCIES /root/.m2 /root/.m2 COPY pom.xml . COPY modules modules From 61599dda38e197ef455ecbe2c58bdf42a7c2d844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Thu, 1 May 2025 20:37:06 +0300 Subject: [PATCH 4/9] Dockerize cli app --- modules/cli-wrapper/Dockerfile | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 modules/cli-wrapper/Dockerfile diff --git a/modules/cli-wrapper/Dockerfile b/modules/cli-wrapper/Dockerfile new file mode 100644 index 0000000..55720cd --- /dev/null +++ b/modules/cli-wrapper/Dockerfile @@ -0,0 +1,25 @@ +FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +WORKDIR /app +COPY pom.xml . +COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml +COPY modules/core/pom.xml modules/core/pom.xml +COPY modules/rest-api/pom.xml modules/rest-api/pom.xml +COPY modules/webapp/pom.xml modules/webapp/pom.xml + +RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core + +FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +LABEL authors="gpspatacean" + +WORKDIR /app +COPY --from=DEPENDENCIES /root/.m2 /root/.m2 +COPY pom.xml . +COPY modules modules + +RUN mvn clean package -pl modules/cli-wrapper -am -B -e -DskipTests + +FROM eclipse-temurin:21-jre +WORKDIR /app +COPY --from=BUILDER /app/modules/cli-wrapper/target/*.jar /app/app.jar + +ENTRYPOINT ["java", "-jar", "/app/app.jar"] From fa5e6958ffbee23d90f3b6f2d0429330f31904fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 21 Sep 2025 16:14:54 +0300 Subject: [PATCH 5/9] lowercase build stage names, as per Docker build checks reference --- modules/cli-wrapper/Dockerfile | 8 ++++---- modules/rest-api/Dockerfile | 8 ++++---- modules/webapp/Dockerfile | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/cli-wrapper/Dockerfile b/modules/cli-wrapper/Dockerfile index 55720cd..6a7e994 100644 --- a/modules/cli-wrapper/Dockerfile +++ b/modules/cli-wrapper/Dockerfile @@ -1,4 +1,4 @@ -FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +FROM maven:3.9.9-eclipse-temurin-21 AS dependencies WORKDIR /app COPY pom.xml . COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml @@ -8,11 +8,11 @@ COPY modules/webapp/pom.xml modules/webapp/pom.xml RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core -FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +FROM maven:3.9.9-eclipse-temurin-21 AS builder LABEL authors="gpspatacean" WORKDIR /app -COPY --from=DEPENDENCIES /root/.m2 /root/.m2 +COPY --from=dependencies /root/.m2 /root/.m2 COPY pom.xml . COPY modules modules @@ -20,6 +20,6 @@ RUN mvn clean package -pl modules/cli-wrapper -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app -COPY --from=BUILDER /app/modules/cli-wrapper/target/*.jar /app/app.jar +COPY --from=builder /app/modules/cli-wrapper/target/*.jar /app/app.jar ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/modules/rest-api/Dockerfile b/modules/rest-api/Dockerfile index 0cf0ede..d5f0f23 100644 --- a/modules/rest-api/Dockerfile +++ b/modules/rest-api/Dockerfile @@ -1,4 +1,4 @@ -FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +FROM maven:3.9.9-eclipse-temurin-21 AS dependencies WORKDIR /app COPY pom.xml . COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml @@ -8,11 +8,11 @@ COPY modules/webapp/pom.xml modules/webapp/pom.xml RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core -FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +FROM maven:3.9.9-eclipse-temurin-21 AS builder LABEL authors="gpspatacean" WORKDIR /app -COPY --from=DEPENDENCIES /root/.m2 /root/.m2 +COPY --from=dependencies /root/.m2 /root/.m2 COPY pom.xml . COPY modules modules @@ -20,8 +20,8 @@ RUN mvn clean package -pl modules/rest-api -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app -COPY --from=BUILDER /app/modules/rest-api/target/*.jar /app/app.jar +COPY --from=builder /app/modules/rest-api/target/*.jar /app/app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/modules/webapp/Dockerfile b/modules/webapp/Dockerfile index c6a7ed4..68c1465 100644 --- a/modules/webapp/Dockerfile +++ b/modules/webapp/Dockerfile @@ -1,4 +1,4 @@ -FROM maven:3.9.9-eclipse-temurin-21 AS DEPENDENCIES +FROM maven:3.9.9-eclipse-temurin-21 AS dependencies WORKDIR /app COPY pom.xml . COPY modules/cli-wrapper/pom.xml modules/cli-wrapper/pom.xml @@ -8,11 +8,11 @@ COPY modules/webapp/pom.xml modules/webapp/pom.xml RUN mvn dependency:go-offline -B -e -DskipTests -DexcludeArtifactsIds=podo-generator-core -FROM maven:3.9.9-eclipse-temurin-21 AS BUILDER +FROM maven:3.9.9-eclipse-temurin-21 AS builder LABEL authors="gpspatacean" WORKDIR /app -COPY --from=DEPENDENCIES /root/.m2 /root/.m2 +COPY --from=dependencies /root/.m2 /root/.m2 COPY pom.xml . COPY modules modules @@ -20,8 +20,8 @@ RUN mvn clean package -pl modules/webapp -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app -COPY --from=BUILDER /app/modules/webapp/target/*.jar /app/app.jar +COPY --from=builder /app/modules/webapp/target/*.jar /app/app.jar EXPOSE 8081 ENTRYPOINT ["java", "-jar", "/app/app.jar"] From 0ba23bde215716a750dcdde7f94c1e9fa96f77dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 21 Sep 2025 16:15:25 +0300 Subject: [PATCH 6/9] Run apps with dedicated non root user --- modules/cli-wrapper/Dockerfile | 4 ++++ modules/rest-api/Dockerfile | 4 ++++ modules/webapp/Dockerfile | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/modules/cli-wrapper/Dockerfile b/modules/cli-wrapper/Dockerfile index 6a7e994..a2eadb7 100644 --- a/modules/cli-wrapper/Dockerfile +++ b/modules/cli-wrapper/Dockerfile @@ -21,5 +21,9 @@ RUN mvn clean package -pl modules/cli-wrapper -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app +RUN useradd -m -s /usr/sbin/nologin appuser +USER appuser + COPY --from=builder /app/modules/cli-wrapper/target/*.jar /app/app.jar + ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/modules/rest-api/Dockerfile b/modules/rest-api/Dockerfile index d5f0f23..f661e8a 100644 --- a/modules/rest-api/Dockerfile +++ b/modules/rest-api/Dockerfile @@ -21,7 +21,11 @@ RUN mvn clean package -pl modules/rest-api -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app +RUN useradd -m -s /usr/sbin/nologin appuser +USER appuser + COPY --from=builder /app/modules/rest-api/target/*.jar /app/app.jar + EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/modules/webapp/Dockerfile b/modules/webapp/Dockerfile index 68c1465..1cb842c 100644 --- a/modules/webapp/Dockerfile +++ b/modules/webapp/Dockerfile @@ -21,7 +21,11 @@ RUN mvn clean package -pl modules/webapp -am -B -e -DskipTests FROM eclipse-temurin:21-jre WORKDIR /app +RUN useradd -m -s /usr/sbin/nologin appuser +USER appuser + COPY --from=builder /app/modules/webapp/target/*.jar /app/app.jar + EXPOSE 8081 ENTRYPOINT ["java", "-jar", "/app/app.jar"] From 6a15e4846201099bb0b47f26f4e1910bcb9354b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 21 Sep 2025 17:39:26 +0300 Subject: [PATCH 7/9] Add simple docker compose file --- compose.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 compose.yaml diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..ef58e69 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,13 @@ +services: + restapi: + build: + context: . + dockerfile: modules/rest-api/Dockerfile + ports: + - "8080:8080" + webapp: + build: + context: . + dockerfile: modules/webapp/Dockerfile + ports: + - "8081:8081" From 4a8d4aac8ca152081457f97ed7b2b2f6bce77c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 15 Feb 2026 13:27:32 +0200 Subject: [PATCH 8/9] dockerignore node/angular temp files --- .dockerignore | 4 ++++ modules/webapp/.dockerignore | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 .dockerignore create mode 100644 modules/webapp/.dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..edc8e33 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +modules/webapp/src/main/angular/node_modules +modules/webapp/src/main/angular/dist +modules/webapp/src/main/angular/node +modules/webapp/src/main/angular/.angular diff --git a/modules/webapp/.dockerignore b/modules/webapp/.dockerignore new file mode 100644 index 0000000..9054e71 --- /dev/null +++ b/modules/webapp/.dockerignore @@ -0,0 +1,4 @@ +src/main/angular/node_modules +src/main/angular/dist +src/main/angular/node +src/main/angular/.angular From e979f33cdb01234c903b9c77a858d3725c330a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Sp=C4=83t=C4=83cean?= Date: Sun, 15 Feb 2026 13:28:00 +0200 Subject: [PATCH 9/9] k8s deployment first draft --- k8s-deployment.yaml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 k8s-deployment.yaml diff --git a/k8s-deployment.yaml b/k8s-deployment.yaml new file mode 100644 index 0000000..a7a8bad --- /dev/null +++ b/k8s-deployment.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: json-schema-podo-generator + labels: + app: json-schema-podo-generator +spec: + replicas: 1 + selector: + matchLabels: + app: json-schema-podo-generator + template: + metadata: + labels: + app: json-schema-podo-generator + spec: + containers: + - name: jspg-restapi + image: spatacean.com/jspg/rest-api:k8s-test + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + - name: jspg-webapp + image: spatacean.com/jspg/webapp:k8s-test + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8081 +--- +apiVersion: v1 +kind: Service +metadata: + name: json-schema-podo-generator + labels: + app: json-schema-podo-generator +spec: + selector: + app: json-schema-podo-generator + ports: + - port: 8081 + targetPort: 8081 + nodePort: 30081 + type: NodePort