Recently, I’ve decided to refresh my knowledge regarding Docker and created an image with Alpine Linux and Java 9, which can be a useful base for the future projects. I used Alpine as a base image because it became quite popular in the Docker world due to its simplicity and the fact that it’s pretty lightweight when we compare it to containers based on other Linux distributions. Pure Alpine Docker container has about 4.144 MB, what is really impressing.

Container with Java 9

My Dockerfile looks pretty simple:

1
2
3
4
5
6
7
8
9
10
11
FROM alpine:latest
MAINTAINER pwittchen
USER root

RUN wget http://download.java.net/java/jdk9-alpine/archive/181/binaries/jdk-9-ea+181_linux-x64-musl_bin.tar.gz
RUN tar -xzvf *.tar.gz
RUN chmod +x jdk-9
RUN mv jdk-9 /usr/local/share
ENV JAVA_HOME=/usr/local/share/jdk-9
ENV PATH="$JAVA_HOME/bin:${PATH}"
RUN rm -rf *.tar.gz

We’re downloading JDK, unpacking it, moving to /usr/local/share directory, creating $JAVA_HOME environmental variable and adding $JAVA_HOME/bin to the $PATH. After that, we’re removing downloaded *.tar.gz file. We can find it on Docker Hub: https://hub.docker.com/r/pwittchen/alpine-java9/ To pull the image from Docker Hub, just type:

1
sudo docker pull pwittchen/alpine-java9

To run it with CLI, type:

1
sudo docker run -i -t pwittchen/alpine-java9

Then, we can play around with jshell inside the container:

1
2
3
4
5
6
7
8
/ # jshell
Dec 27, 2017 1:18:10 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro

jshell> System.out.println("hello from docker!")
hello from docker!

This container is not so small and has about 919.2 MB. It contains whole JDK, so probably this size could be reduced.

Note!

Right now (21st of March 2018), this solution doesn’t work any longer. Please, search for an official Alpine image with Java 9 or use image with Ubuntu and Java 9 located in dockerfiles-java repo.

Container with Java 8

I’ve also created another image with Java 8 (just in case):

1
2
3
4
5
6
7
FROM alpine:latest
MAINTAINER pwittchen
USER root

RUN apk update
RUN apk fetch openjdk8
RUN apk add openjdk8

We can also find it on GitHub: github.com/pwittchen/dockerfiles-java (inside the alpine-java8 directory), Docker Hub: https://hub.docker.com/r/pwittchen/alpine-java8/ and pull it from the Docker Hub:

1
sudo docker pull pwittchen/alpine-java8

and run it with CLI as follows:

1
sudo docker run -i -t pwittchen/alpine-java8

In this case, container has 118.5 MB, which is better result than for the previous container. In this case, we’re installing Java 8 for Alpine from official repository, so probably it’s already optimized. I hope, you’ll find it useful while developing your projects in Java 8 or Java 9.