Как Dockerize Java приложение, которое зависит от локальных репозиториев Maven? - PullRequest
1 голос
/ 21 марта 2020

У меня есть Java веб-приложение Spring Boot, которое я хотел бы поместить в контейнер с помощью Docker. У меня проблемы с тем, чтобы команда mvn install работала во время процесса сборки Docker, потому что мой проект зависит от некоторых других написанных мной проектов Maven, которые установлены в моей локальной папке /.m2, но недоступны в Maven центральное хранилище. Я бы не хотел добавлять эти локальные проекты в центральный репозиторий publi c Maven, потому что они существуют специально для поддержки этого Spring Boot-приложения, и я хотел бы сохранить их в секрете.

Если бы я не использовал Docker, я мог бы обойти эту проблему, создав JAR с зависимостями и развернув этот .jar файл. Можно ли как-нибудь включить эти локальные зависимости в мой Docker процесс сборки?

Вот простой Dockerfile, который я пытаюсь запустить:

# Step 1: Build with Maven
FROM maven:3.5-jdk-8-alpine

COPY . /usr/src/myapp
WORKDIR /usr/src/myapp

RUN mvn clean install


# Step 2: Run jar file with Java
FROM openjdk:8-alpine

WORKDIR /usr/src/myapp

COPY --from=0 /usr/src/myapp/target/myapp-1.0-SNAPSHOT.jar ./myapp.jar

ENTRYPOINT ["java", "-jar", "myapp.jar"]

Я запускаю эту команду сборки :

docker build -t myspringapp .

И выдается следующее сообщение:

[ERROR] Failed to execute goal on project server: Could not resolve dependencies for project 
com.website:myapp:jar:1.0-SNAPSHOT: The following artifacts could not be resolved: 
com.website:dependency1:jar:0.1.0, com.website:dependency2:jar:0.1.0, 
com.website:dependency3:jar:0.1.0: 
Could not find artifact com.website:dependency1:jar:0.1.0 in central 
(https://repo.maven.apache.org/maven2) -> [Help 1]

В качестве альтернативы могу ли я просто запустить команду mvn clean install на моей машине для разработки, чтобы создать файл jar, а затем пропустить всю часть сборки Maven образа Docker? Сможет ли мой контейнер по-прежнему копировать себя в сценарии автоматического масштабирования? Потеряю ли я что-либо, создав проект отдельно от его Docker изображения / контейнера?

1 Ответ

1 голос
/ 21 марта 2020

Самое простое, что можно сделать, это просто поместить каталог .m2 в контекст сборки Docker и убедиться, что на этапе сборки Dockerfile значение .m2 *1003* соответствует значению везде, где находится базовый образ maven. ожидая, что это будет. Таким образом, на этапе сборки не нужно загружать ваши личные файлы JAR.

Чтобы ответить на альтернативный вопрос, да. Это не очень 12-факторный фактор, но определенно выполнимо выполнить сборку JAR вне экосистемы Docker, а затем просто COPY предварительно встроенный файл JAR в образ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...