From 01ce385c30cfee2949715ea19e8c643091295b06 Mon Sep 17 00:00:00 2001 From: Denis Savosin Date: Mon, 7 Oct 2024 13:14:50 +0700 Subject: [PATCH] dockerize application --- .dockerignore | 2 ++ .env.example | 7 +++++++ .gitignore | 3 +++ Dockerfile | 3 +++ build.gradle.kts | 3 +-- docker-compose.yml | 17 +++++++++++++++++ readme.md | 16 ++++++++++++++-- src/main/resources/application.yml | 12 ++++++------ 8 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..174f63d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +* +!build/libs/ \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e5111d2 --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +DB_URL=localhost:5432 +DB_NAME=demo +DB_SCHEMA=public +DB_USERNAME=postgres +DB_PASSWORD=postgres + +KAFKA_SERVERS=localhost:9095 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9940ed0..47380be 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ out/ ### Kotlin ### .kotlin + +.env +docker-compose.override.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..59c2009 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM openjdk:17-jdk-slim +COPY --chmod=777 build/libs/demo-single-version.jar /application/demo.jar +CMD ["java", "-jar", "/application/demo.jar"] \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 822c5b6..b3e833f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "com.example" -version = "0.0.1-SNAPSHOT" +version = "single-version" java { sourceCompatibility = JavaVersion.VERSION_17 @@ -69,4 +69,3 @@ tasks.test { tasks.jacocoTestReport { dependsOn(tasks.test) // tests are required to run before generating the report } - diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..89c0dea --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +--- +services: + demo: + image: localhost/spring-boot-demo:latest + build: + dockerfile: Dockerfile + context: . + environment: + DB_URL: $DB_URL + DB_NAME: $DB_NAME + DB_SCHEMA: $DB_SCHEMA + DB_USERNAME: $DB_USERNAME + DB_PASSWORD: $DB_PASSWORD + KAFKA_SERVERS: $KAFKA_SERVERS + expose: + - 8080 + - 8081 diff --git a/readme.md b/readme.md index 94aa825..966a04c 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ Demo приложение для изучения языка `kotlin` и фре * `jdk` версии `17` * `postgresql` версии `14` * `kafka` без авторизации -* `docker` + `compose` (для тестов) +* `docker` + `compose` ## Доступные команды @@ -19,4 +19,16 @@ Demo приложение для изучения языка `kotlin` и фре * запуск приложения ```shell ./gradlew bootRun - ``` \ No newline at end of file + ``` + +## Запуск с docker-compose + +Перед каждым запуском необходимо собрать приложение: +```shell +./gradlew assemble +``` + +Затем можно запускать контейнер: +```shell +docker compose up -d +``` \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1566f1f..0950bbd 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,20 +3,20 @@ spring: application: name: Demo datasource: - url: jdbc:postgresql://localhost:5432/demo?currentSchema=public - username: postgres - password: postgres + url: jdbc:postgresql://${DB_URL:localhost:5432}/${DB_NAME:demo}?currentSchema=${DB_SCHEMA:public} + username: ${DB_USERNAME:postgres} + password: ${DB_PASSWORD:postgres} driver-class-name: org.postgresql.Driver hikari: - schema: public + schema: ${DB_SCHEMA:public} flyway: #flyway automatically uses the datasource from the application to connect to the DB enabled: true # enables flyway database migration locations: classpath:db/migration/structure, classpath:db/migration/data # the location where flyway should look for migration scripts validate-on-migrate: true - default-schema: public + default-schema: ${DB_SCHEMA:public} kafka: - bootstrap-servers: localhost:9095 + bootstrap-servers: ${KAFKA_SERVERS:localhost:9095} producer: product: default-sync-topic: demo-product-sync