digital-garden/dev/java/quarkus/Сборка Quarkus приложения в исполняемый файл.md
Struchkov Mark c4762ee1f0
All checks were successful
continuous-integration/drone/push Build is passing
Добавил всем заметкам метаданные
2024-09-09 21:07:47 +03:00

3.2 KiB
Raw Blame History

aliases tags date zero-link parents linked
maturity/🌱
2024-04-07
../../../meta/zero/00 Quarkus
../Нативные сборки в Java

Провозился два дня, но в итоге смог собрать один из микро-сервисов в нативном режиме. Ничего сложного, но было много нюансов в настройке CICD.

Самое полезное, это вот эта документация Quarkus. А конкретно флаги:

  • -Dquarkus.native.container-build=true
  • -Dquarkus.native.remote-container-build=true

Эти флаги необходимо добавить в команду сборки

gradle build -Dquarkus.package.type=native -Dquarkus.native.remote-container-build=true
./mvnw package -Dnative -Dquarkus.native.remote-container-build=true

Во время сборки будет скачан докер образ с GraalVM и сборка будет проходить уже в этом образе. То есть можно использовать любой раннер CI без предварительной настройки базового образа.

А вот так выглядит Dockerfile сервиса:

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6
WORKDIR /work/
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY ./build/*-runner /work/application

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Сервис стал собираться в 2,5 раза больше, около 5 минут, вместо 2. Но теперь он стартует моментально, наверное за доли секунды. При этом на под выделяется всего 256 mb ОЗУ на старте и 512 mb в момент работы.

Более сложный путь

Также слепил образ для GitLab-раннера, который совмещает GraalVM и Docker, осталось добавить в него Gradle, но пока использую ./gradlew. Оставлю это тут на всякий случай.

FROM ghcr.io/graalvm/graalvm-ce:ol9-java17-22.3.0
WORKDIR /opt/graalvm
RUN gu install native-image
RUN microdnf -y install dnf-plugins-core
RUN microdnf -y install yum
RUN yum install -y yum-utils
RUN yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y docker-ce docker-ce-cli containerd.io

Мета информация

Область:: ../../../meta/zero/00 Quarkus Родитель:: ../Нативные сборки в Java Источник:: Автор:: Создана:: 2024-04-07

Дополнительные материалы

Дочерние заметки

LIST 
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)