Как собрать нативный бинарный файл с помощью образа Docker graalvm?

Вопрос или проблема

Я использую WSL 2, Ubuntu 20.10 LTS (только терминал, без GUI), командная строка Docker.
Я следую https://www.graalvm.org/latest/reference-manual/native-image/guides/build-java-modules-into-native-executable/

git clone https://github.com/graalvm/graalvm-demos

cd graalvm-demos/native-hello-module

mvn package

java --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule

native-image --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule // Я не могу продолжить отсюда.

У меня есть эти вещи в порядке

# GraalVM JDK с Native Image
docker pull container-registry.oracle.com/graalvm/native-image:23

# GraalVM JDK без Native Image
docker pull container-registry.oracle.com/graalvm/jdk:23
..../temp_2024_11_08/graalvm-demos/native-hello-module# docker -v
Docker version 27.3.1, build ce12230

..../temp_2024_11_08/graalvm-demos/native-hello-module# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
container-registry.oracle.com/graalvm/jdk            23        147c8d17a611   4 недели назад  695MB
container-registry.oracle.com/graalvm/native-image   23        5aa4390ae7b9   4 недели назад  1.2GB
hello-world                                          latest    d2c94e258dcb   18 месяцев назад 13.3kB
..../temp_2024_11_08/graalvm-demos/native-hello-module#

Как собрать нативный бинарник с помощью моего существующего образа Docker graalvm?

Ответ или решение

Для создания нативного бинарного файла с использованием образа GraalVM в Docker, следуя описанным шагам и указанной в вашем вопросе инструкции, вам потребуется выполнить несколько необходимых действий. Ваша текущая среда разработки на WSL 2 с Ubuntu 20.10 LTS и использование командной строки Docker дают вам все нужные инструменты для начала этого процесса. Давайте разберемся с пошаговой инструкцией.

Пошаговая инструкция по созданию нативного бинарника с использованием Docker образа GraalVM

Шаг 1: Подготовка окружения

Убедитесь, что вы правильно настроили вашу среду. У вас уже есть Docker и необходимые образы GraalVM, как вы упомянули в вашем вопросе. Обязательно проверьте, что вы используете последний стабильный образ с Native Image:

docker pull container-registry.oracle.com/graalvm/native-image:23

Шаг 2: Клонирование репозитория и сборка проекта

Вы уже клонировали репозиторий graalvm-demos и перешли в папку native-hello-module. Теперь вам нужно собрать проект. Для этого используйте Maven:

cd graalvm-demos/native-hello-module
mvn package

Это создаст файл JAR в папке target.

Шаг 3: Создание контейнера с отладкой

Теперь необходимо запустить Docker-контейнер на базе образа GraalVM. Это позволит вам использовать все необходимые инструменты для создания нативного бинарника:

docker run -it --rm -v "$PWD":/app -w /app container-registry.oracle.com/graalvm/native-image:23 bash

В этом случае мы подключаем вашу текущую директорию к контейнеру, что делает файлы проекта доступными внутри него.

Шаг 4: Сборка нативного образа

Находясь в контейнере, выполните следующие команды, чтобы создать нативный образ:

# Установите все зависимости
mvn package

# Создайте нативное приложение с помощью native-image
native-image --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule

Обратите внимание, что --module-path указывает на путь к вашему JAR файлу, а --module — на имя вашего модуля.

Шаг 5: Проверка результата

После успешной сборки, у вас должен появиться исполняемый файл. Для его проверки выполните:

./HelloModule

Если все шаги были выполнены правильно, ваш нативный бинарный файл должен успешно выполниться.

Заключение

Теперь вы знаете, как создать нативный бинарник для вашего Java модуля с использованием образа GraalVM в Docker. Этот процесс включает в себя подготовку рабочей среды, клонирование необходимого репозитория, компиляцию с Maven и, наконец, создание нативного образа с помощью команды native-image. Используйте эту инструкцию для работы с GraalVM и наслаждайтесь преимуществами создания эффективных нативных приложений на Java.

Если у вас возникли дополнительные вопросы или сложности в процессе, не стесняйтесь задавать их, и я помогу вам!

Оцените материал
Добавить комментарий

Капча загружается...