From c11d5ff1924b00ddde6da5c98c0563f8fa9d9104 Mon Sep 17 00:00:00 2001 From: Marcel Raddatz Date: Wed, 1 Apr 2026 20:51:54 +0200 Subject: [PATCH] Add Docker Compose setup with PostgreSQL 16 and Spring Boot app Multi-stage Dockerfile for the backend (build + runtime). Compose defines db (postgres:16-alpine with healthcheck) and app services. Co-Authored-By: Claude Sonnet 4.6 --- backend/Dockerfile | 13 +++++++++++++ docker-compose.yml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..0b4c221 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,13 @@ +FROM eclipse-temurin:21-jdk-alpine AS build +WORKDIR /app +COPY mvnw pom.xml ./ +COPY .mvn .mvn +RUN ./mvnw dependency:go-offline -B +COPY src src +RUN ./mvnw package -DskipTests -B + +FROM eclipse-temurin:21-jre-alpine +WORKDIR /app +COPY --from=build /app/target/*.jar app.jar +EXPOSE 8080 +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3bb25ac --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +services: + db: + image: postgres:16-alpine + container_name: mealprep-db + environment: + POSTGRES_DB: mealprep + POSTGRES_USER: mealprep + POSTGRES_PASSWORD: mealprep + ports: + - "5432:5432" + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U mealprep"] + interval: 5s + timeout: 3s + retries: 5 + + app: + build: + context: ./backend + dockerfile: Dockerfile + container_name: mealprep-app + ports: + - "8080:8080" + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mealprep + SPRING_DATASOURCE_USERNAME: mealprep + SPRING_DATASOURCE_PASSWORD: mealprep + SPRING_PROFILES_ACTIVE: docker + depends_on: + db: + condition: service_healthy + +volumes: + pgdata: