From 2ec64ff0e9e6afe0a2161a5e01846c8a642bc64e Mon Sep 17 00:00:00 2001 From: Arshadul Monir Date: Thu, 25 Jun 2026 20:56:29 -0400 Subject: [PATCH] Added Dockerfile and dockerignore --- .dockerignore | 7 +++++++ infra/Dockerfile | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .dockerignore create mode 100644 infra/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..93de3b6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +node_modules +js/node_modules +target +.git +.DS_Store +dist +js/dist \ No newline at end of file diff --git a/infra/Dockerfile b/infra/Dockerfile new file mode 100644 index 0000000..e9cf45b --- /dev/null +++ b/infra/Dockerfile @@ -0,0 +1,41 @@ +# Build the React frontend +FROM mirror.gcr.io/library/node:20 AS frontend-build + +WORKDIR /js +COPY js/package.json js/pnpm-lock.yaml ./ +RUN corepack enable pnpm && pnpm i --frozen-lockfile + +COPY js/ ./ +RUN pnpm run build + +# Build the Spring Boot backend and package the frontend into the app +FROM mirror.gcr.io/library/eclipse-temurin:25-jdk-jammy AS backend-build + +WORKDIR /app +COPY mvnw pom.xml ./ +COPY .mvn/ .mvn/ +RUN ./mvnw dependency:resolve -B + +COPY src ./src +COPY --from=frontend-build /js/dist/ src/main/resources/static/ +RUN ./mvnw package -B -DskipTests + +# Create the final runtime image +FROM mirror.gcr.io/library/eclipse-temurin:25-jre-jammy + +RUN groupadd --system spring \ + && useradd --system --gid spring --home-dir /app spring \ + && mkdir -p /app \ + && chown spring:spring /app + +WORKDIR /app + +COPY --from=backend-build --chown=spring:spring /app/target/*.jar app.jar + +ARG SERVER_PROFILES=prod +ENV SPRING_PROFILES_ACTIVE=${SERVER_PROFILES} + +USER spring:spring + +EXPOSE 8080 +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file