diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..867ebb4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +build/ +.gradle/ +.git/ +.gitignore +.idea/ +*.iml +*.log +docker-compose*.yml +README.md diff --git a/Dockerfile b/Dockerfile index e69de29..b7c999e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -0,0 +1,32 @@ +# Этап сборки +FROM eclipse-temurin:21-jdk-alpine AS builder + +WORKDIR /app + +COPY gradlew build.gradle settings.gradle ./ +COPY gradle gradle +RUN chmod +x gradlew + +# Кэш зависимостей +RUN ./gradlew dependencies --no-daemon || true + +# Копируем исходники +COPY src src + +# Сборка jar +RUN ./gradlew bootJar --no-daemon + +# Этап запуска +FROM eclipse-temurin:21-jre-alpine + +WORKDIR /app + +RUN addgroup -S appgroup && adduser -S appuser -G appgroup + +COPY --from=builder /app/build/libs/*.jar app.jar + +USER appuser + +EXPOSE 8080 + +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/README.md b/README.md index dc890a6..c75481a 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,20 @@ ```bash git clone https://github.com/your-username/teacher-diary.git cd teacher-diary +``` +# Сборка образа +```` +docker build -t malexple/teacher-diary:latest -t malexple/teacher-diary:1.0.0 . +```` -docker run -d -p 1025:1025 -p 8025:8025 --name mailhog mailhog/mailhog \ No newline at end of file +# Логин в Docker Hub +```` +docker login -u malexple +```` + +# Пуш в Docker Hub +```` +docker push malexple/teacher-diary:latest +docker push malexple/teacher-diary:1.0.0 +```` diff --git a/docker-compose.yml b/docker-compose.yml index e158225..b8a4d73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,29 +1,35 @@ version: '3.8' services: - postgres: - image: postgres:16-alpine - container_name: teacher-diary-db + app: + image: malexple/teacher-diary:latest + ports: + - "8080:8080" environment: - POSTGRES_DB: teacher_diary_dev + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/teacher_diary + SPRING_DATASOURCE_USERNAME: postgres + SPRING_DATASOURCE_PASSWORD: postgres + SPRING_JPA_HIBERNATE_DDL_AUTO: update + depends_on: + db: + condition: service_healthy + restart: unless-stopped + + db: + image: postgres:16-alpine + environment: + POSTGRES_DB: teacher_diary POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres - ports: - - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data + ports: + - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] - interval: 10s + interval: 5s timeout: 5s retries: 5 - mailhog: - image: mailhog/mailhog:latest - container_name: teacher-diary-mail - ports: - - "1025:1025" # SMTP - - "8025:8025" # Web UI - volumes: postgres_data: