This image is based on Alpine Linux image, which is only a 5MB image, and contains Java runtime (JRE) and Java development kit (JDK) conveniently packaged into separate Docker tags.
You must accept the Oracle Binary Code License Agreement for Java SE to use this image (see issue #6 for details).
JDK bundle contains lots of unnecessary for Docker image stuff, so it was cleaned up. There are 3
tags: *-full
(only src tarballs get removed), *-cleaned
(desktop parts get cleaned), *-slim
(everything but compiler and jvm is removed). master
branch refers to jdk8-slim
tag, but
latest
tag points to jdk8-cleaned
.
jdk8-slim
(master
branch) download image size is:
jdk8-cleaned
(latest
tag) download image size is:
jdk8-full
download image size is:
Consider using jre*
tags of this image if you only need JRE (you can run Java applications, but cannot build/compile them):
jre8-slim
(master
branch) download image size is:
jre8-cleaned
(latest
tag) download image size is:
jre8-full
download image size is:
$ echo 'public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }' > Main.java
$ docker run --rm -v "$(pwd)":/mnt --workdir /mnt frolvlad/alpine-java:jdk8-slim sh -c "javac Main.java && java Main"
Once you have run this command you will get printed 'Hello World' from Java!
Use Docker multi-stage builds to slim down your final Docker images:
FROM frolvlad/alpine-java:jdk8-slim AS builder
RUN echo 'public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }' > Main.java
RUN javac Main.java
FROM frolvlad/alpine-java:jre8-slim
COPY --from=builder /Main.class /
CMD ["java", "Main"]
$ docker build -t my-app .
$ docker run --rm my-app
Hello World
Your application image is going to be only 119MB on disk.