Как я могу автоматически создать свой образ Docker без включения источников? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу, чтобы мой Dockerfile автоматически клонировал мой репозиторий GitHub, используйте Maven для создания .jar-файла и, наконец, используйте указанный .jar-файл в образе, не включая исходные файлы или пакеты Git и Maven.

Возможно ли это, или мне нужно вручную скомпилировать .jar-файл вне Dockerfile, чтобы скопировать его в образ при его создании?

Моя цель - сделать так, чтобы DockerHub автоматически перестраивал мой проектimage всякий раз, когда я добавляю в него новый код.

В настоящий момент мой Dockerfile устанавливает Git и Maven, клонирует мой репозиторий и компилирует .jar-файл. Это прекрасно работает, но не похоже на оптимальное решение, так как пакеты Git и Maven остаются установленными в образе.

#Where we start
FROM openjdk:12-alpine

#Get APK up to date
RUN apk update && apk upgrade

#Install Maven
RUN apk add maven

#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit

#Build
RUN mvn -f /HungryBoiiGit clean install

#Save result
RUN mkdir /Executables
RUN cp -r /HungryBoiiGit/target/HungryBoii-distributable/* /Executables

#Remove Git repo
RUN rm -rf /HungryBoiiGit

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
WORKDIR /Executables
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]

Я понимаю, что есть плагины maven, которые создают и переносят образ Docker всякий раз, когда я решаюпостроить мой проект, но это не совсем то, как я хочу это сделать. Я хочу, чтобы автоматизированная сборка на DockerHub сделала это для меня без каких-либо пакетов или источников.

1 Ответ

2 голосов
/ 07 октября 2019

Один из способов - использовать многоступенчатую сборку, как описано здесь: https://docs.docker.com/develop/develop-images/multistage-build/.

Многоступенчатая сборка позволяет устанавливать зависимости сборки и создавать артефакты выпуска за один этап, а затем копировать только артефакты сборки вконечное изображение.

Например:

#Where we start
FROM openjdk:12-alpine AS builder

#Get APK up to date
RUN apk update && apk upgrade

#Install Maven
RUN apk add maven

#Git
RUN apk add git
RUN mkdir /HungryBoiiGit
RUN git clone https://github.com/hannesknutsson/HungryBoii.git /HungryBoiiGit

#Build
RUN mvn -f /HungryBoiiGit clean install

# Build release image
FROM openjdk:12-alpine

#Copy result
WORKDIR /Executables
COPY --from=builder /HungryBoiiGit/target/HungryBoii-distributable .

#Add user and group for running as unprivileged user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

#Define how to start
ENTRYPOINT ["java", "-jar", "HungryBoii-1.0-SNAPSHOT.jar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...