docker-graalvm-maven
docker-graalvm-maven copied to clipboard
Docker image to build native Linux binaries from Java Maven projects using GraalVM native-image feature.
docker-graalvm-maven 
- What is it?
- Usage
- License
What is it?
Opinionated docker image based on the Debian docker image debian:stable-slim to
build native Linux binaries from Java Maven projects using GraalVM CE native-image feature.
It is automatically built twice per week to include the latest updates and security fixes.
The image comes pre-installed with latest releases of:
- Apache Maven build automation tool for Java projects
- bash-funk Bash toolbox with adaptive Bash prompt
- Docker CE (Community Edition) command line client
- git command line client
- GraalVM CE (Community Edition) for JDK 11, 17, 21 or 22 with native-image extension.
- openssh-client SSH command line client
- upx executable packer
Further we add the user user with uid 1000 and gid 1000 as non-privileged user in order to run without root privileges.
Note, that the user is not set to 1000 within the docker image. Specify the uid to be 1000 with your docker run command.
Docker image tagging scheme
| Tag | Description |
|---|---|
:latest-java11 |
latest available GraalVM CE releases for the given JDK |
:dev-java23 |
latest available GraalVM CE development builds for the given JDK |
:XX.Y.Z |
the given GraalVM CE releases (e.g. 17.0.8 for JDK 17 and 21.0.0 for JDK 21) following GraaLVM's new version naming scheme. |
:XX.Y.Z-java11 |
the given GraalVM CE releases (e.g. 22.3.2-java11) following GraaLVM's old version naming scheme |
See all available tags at https://hub.docker.com/r/vegardit/graalvm-maven/tags
Usage
Building a local Maven project
To build a Maven project located on your local workstation with via this docker image you can do:
-
On Linux:
$ cd ~/myproject $ docker run --rm -it \ -v $PWD:/mnt/myproject:rw \ -w /mnt/myproject \ vegardit/graalvm-maven:latest-java17 \ mvn clean package -
On Windows:
C:> cd C:\Users\MyUser\myproject C:\Users\MyUser\myproject> docker run --rm -it ^ -v /c/Users/MyUser/myproject:/mnt/myproject:rw ^ -w /mnt/myproject ^ vegardit/graalvm-maven:latest-java17 ^ mvn clean package
Also checkout the example project which provides convenient batch/bash script wrappers and outlines how to do compile Java projects to native Linux binaries.
Using custom Maven settings.xml
You can use a custom Maven settings.xml by mounting it to /root/.m2/settings.xml
$ cd ~/myproject
$ docker run --rm -it \
-v /path/to/my/settings.xml:/root/.m2/settings.xml:ro \
-v $PWD:/mnt/myproject:rw \
-w /mnt/myproject \
vegardit/graalvm-maven:latest-java17 \
mvn clean package
Running docker commands inside the container
This image has the docker command line client installed, which allows you to run other docker containers as part of your build toolchain using a
docker-out-of-docker (DooD) approach
by mounting the /var/run/docker.sock into the container.
$ cd ~/myproject
$ docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock:rw \
-v $PWD:/mnt/myproject:rw \
vegardit/graalvm-maven:latest-java17 \
docker run --rm hello-world
Caching local Maven repository between runs
You can a local folder to /root/.m2/repository to cache the downloaded artifacts between Maven runs
$ cd ~/myproject
$ docker run --rm -it \
-v /path/to/my/local/repository:/root/.m2/repository:rw \
-v $PWD:/mnt/myproject:rw \
-w /mnt/myproject \
vegardit/graalvm-maven:latest-java17 \
mvn clean package
License
All files in this repository are released under the Apache License 2.0.
Individual files contain the following tag instead of the full license text:
SPDX-License-Identifier: Apache-2.0
This enables machine processing of license information based on the SPDX License Identifiers that are available here: https://spdx.org/licenses/.