Add dockerfiles, add compose, add build.gradle, modify postgres.properties, add .env

This commit is contained in:
user.email 2024-07-21 17:34:12 +02:00
parent 4850aacb51
commit 0619b72113
8 changed files with 160 additions and 25 deletions

6
.env Normal file
View file

@ -0,0 +1,6 @@
DB_USER=customUser
DB_PASSWORD=customPassword
DB_DATABASE=customDb
DB_CONTAINER_NAME=database
DB_URL=jdbc:postgresql://${DB_CONTAINER_NAME}/${DB_DATABASE}

46
Dockerfile Normal file
View file

@ -0,0 +1,46 @@
FROM eclipse-temurin:17-jdk-jammy as deps
WORKDIR /build
COPY --chmod=0755 mvnw mvnw
COPY .mvn/ .mvn/
RUN --mount=type=bind,source=pom.xml,target=pom.xml \
--mount=type=cache,target=/root/.m2 ./mvnw dependency:go-offline -DskipTests
FROM deps as package
WORKDIR /build
COPY ./src src/
RUN --mount=type=bind,source=pom.xml,target=pom.xml \
--mount=type=cache,target=/root/.m2 \
./mvnw package -DskipTests && \
mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar
FROM package as extract
WORKDIR /build
RUN java -Djarmode=layertools -jar target/app.jar extract --destination target/extracted
FROM extract as development
WORKDIR /build
RUN cp -r /build/target/extracted/dependencies/. ./
RUN cp -r /build/target/extracted/spring-boot-loader/. ./
RUN cp -r /build/target/extracted/snapshot-dependencies/. ./
RUN cp -r /build/target/extracted/application/. ./
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
CMD [ "java", "-Dspring.profiles.active=postgres", "org.springframework.boot.loader.launch.JarLauncher" ]
FROM eclipse-temurin:17-jre-jammy AS final
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser
USER appuser
COPY --from=extract build/target/extracted/dependencies/ ./
COPY --from=extract build/target/extracted/spring-boot-loader/ ./
COPY --from=extract build/target/extracted/snapshot-dependencies/ ./
COPY --from=extract build/target/extracted/application/ ./
EXPOSE 8080
ENTRYPOINT [ "java", "-Dspring.profiles.active=postgres", "org.springframework.boot.loader.launch.JarLauncher" ]

28
Dockerfile-multi_stage Normal file
View file

@ -0,0 +1,28 @@
FROM eclipse-temurin:17-jdk-jammy as build
WORKDIR /build
COPY --chmod=0755 mvnw mvnw
COPY .mvn/ .mvn/
COPY pom.xml .
RUN --mount=type=cache,target=/root/.m2 ./mvnw dependency:go-offline -DskipTests
COPY ./src src/
RUN --mount=type=cache,target=/root/.m2 \
./mvnw package -DskipTests && \
mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar
FROM eclipse-temurin:17-jre-jammy AS final
WORKDIR /src
COPY --from=build /build/target/app.jar .
RUN groupadd -r -g 2001 groupuser && useradd -r -m -d /home/myuser -u 2001 -g 2001 -s /sbin/nologin myuser
RUN chown myuser:groupuser .
USER myuser
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/src/app.jar" ]

13
Dockerfile-single_stage Normal file
View file

@ -0,0 +1,13 @@
FROM maven:3.9-eclipse-temurin-17
WORKDIR /src
COPY ./target/spring-petclinic-4.2.jar /src/app.jar
RUN groupadd -r -g 2001 groupuser && useradd -r -m -d /home/myuser -g 2001 myuser
RUN chown myuser:groupuser .
USER myuser
ENTRYPOINT [ "java", "-jar", "/src/app.jar" ]

View file

@ -7,12 +7,15 @@ plugins {
id 'io.spring.javaformat' version '0.0.41'
id "io.spring.nohttp" version "0.0.11"
id 'pl.allegro.tech.build.axion-release' version '1.18.0'
id 'maven-publish'
id 'java-library'
}
apply plugin: 'java'
apply plugin: 'checkstyle'
apply plugin: 'io.spring.javaformat'
gradle.startParameter.excludedTaskNames += [ "checkFormatAot", "checkFormatAotTest" ]
group = 'org.springframework.samples'
@ -27,6 +30,34 @@ repositories {
mavenLocal()
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
groupId = 'com.example'
artifactId = 'myCustomLib'
version = '1.0.0'
}
}
repositories {
maven {
name = 'nexus'
url = uri('http://localhost:8081/repository/maven-local/')
allowInsecureProtocol = true
credentials {
username = 'admin'
password = 'admin'
}
}
}
}
task localpublish {
dependsOn publish
description "publish to a local nexus repository instance"
}
ext.webjarsFontawesomeVersion = "4.7.0"
ext.webjarsBootstrapVersion = "5.3.3"

34
compose.yaml Normal file
View file

@ -0,0 +1,34 @@
services:
database:
image: postgres
environment:
- POSTGRES_USER=${DB_USER:-petclinic}
- POSTGRES_DB=${DB_DATABASE:-petclinic}
- POSTGRES_PASSWORD=${DB_PASSWORD:-petclinic}
healthcheck:
test: ["CMD-SHELL", "pg_isready", "-d", "${DB_DATABASE:-petclinic}"]
interval: 10s
retries: 5
volumes:
- postgres_data:/var/lib/postgresql
app:
build:
context: .
dockerfile: Dockerfile-multi_stage
environment:
- POSTGRES_URL=${DB_URL:-petclinic}
- POSTGRES_USER=${DB_USER:-petclinic}
- POSTGRES_PASS=${DB_PASSWORD:-petclinic}
- DATABASE=postgres
- SPRING_PROFILES_ACTIVE=postgres
depends_on:
database:
condition: service_healthy
volumes:
- deps:/home/myuser/.m2
ports:
- "8080:8080"
volumes:
postgres_data:
deps:

View file

@ -1,25 +0,0 @@
services:
mysql:
image: mysql:8.4
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_USER=petclinic
- MYSQL_PASSWORD=petclinic
- MYSQL_DATABASE=petclinic
volumes:
- "./conf.d:/etc/mysql/conf.d:ro"
profiles:
- mysql
postgres:
image: postgres:16.3
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=petclinic
- POSTGRES_USER=petclinic
- POSTGRES_DB=petclinic
profiles:
- postgres

View file

@ -4,3 +4,5 @@ spring.datasource.username=${POSTGRES_USER:petclinic}
spring.datasource.password=${POSTGRES_PASS:petclinic}
# SQL is written to be idempotent so this is safe
spring.sql.init.mode=always
logging.level=DEBUG
logging.level.org.springframework.web=DEBUG