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.
Tag | Description |
---|---|
:latest-java11 |
latest available GraalVM CE releases for the given JDK |
:dev-java24 |
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
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.
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
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
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
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/.