Я новичок в docker и начал играть с ним в моем небольшом проекте.
Я сам докерризовал сервис со следующим Docker файлом:
ROM adoptopenjdk:11-jdk-hotspot AS DEPENDENCIES_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME
COPY gradle $APP_HOME/gradle
RUN ./gradlew build || return 0
COPY . .
RUN ./gradlew build
FROM adoptopenjdk/openjdk11:jdk-11.0.7_10-alpine AS FINAL
ENV JAR_TEMPLATE=myapp-0.0.1-SNAPSHOT.jar
ENV ARTIFACT_NAME=myapp.jar
ENV APP_HOME=/usr/app
WORKDIR $APP_HOME
COPY --from=DEPENDENCIES_BUILD_IMAGE $APP_HOME/build/libs/$JAR_TEMPLATE .
RUN mv $JAR_TEMPLATE $ARTIFACT_NAME
EXPOSE 8080
CMD ["java", "-jar", "budget-calculator.jar"]
Примечание: я знаю, что есть проблема, которую я всегда копирую 0.0.1-SNAPSHOT
, но в настоящий момент я не знаю, как ее решить.
После этого я хотел подключить свой сервис к Postgres БД с docker -создать, используя это подтверждение:
version: '3'
services:
backend:
build: .
container_name: myapp
ports:
- "8080:8080"
links:
- "db"
depends_on:
- db
networks:
- backend
db:
restart: unless-stopped
image: postgres:10
container_name: myapp-db
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=myapp
ports:
- 5436:5436
networks:
- backend
networks:
backend:
После этого я обновил мой файл application.properties, чтобы указать, что ссылка на БД находится на другом контейнере, как показано ниже:
spring.flyway.url=jdbc:postgresql://db:5436/myapp
spring.flyway.user=postgres
spring.flyway.password=secret
spring.flyway.baseline-on-migrate=true
spring.datasource.url=jdbc:postgresql://db:5436/myapp
spring.datasource.username=postgres
spring.datasource.password=secret
spring.datasource.driverClassName=org.postgresql.Driver
Теперь у меня было 2 проблемы:
- Хотя я предполагал, что
build: .
будет перестраивать мой образ каждый раз, когда я запускаю docker-compose up
, если что-то изменилось на практике, я увидел что это не так. - Когда бэкэнд-сервис запускает flyway (библиотека БД миграции), попробуйте подключиться к базе данных и не может разрешить соединение.
Я видел онлайн что использование - links
устарело, и я должен использовать * 102 6 * но оба, похоже, не работают - что мне не хватает?