AdoptOpenJDK / openjdk-docker

Scripts for creating Docker images of OpenJDK binaries.
https://hub.docker.com/_/adoptopenjdk/
Apache License 2.0
426 stars 237 forks source link
docker-image dockerfile hacktoberfest unofficial-images

⚠ DEPRECATION NOTICE ⚠

These Dockerfiles along with their images are officially deprecated in favor of the eclipse-temurin image, and will receive no further updates after 2021-08-25 (Aug 01, 2021). Please adjust your usage accordingly.

AdoptOpenJDK and Docker

Dockerfiles and build scripts for generating Docker Images based on various AdoptOpenJDK binaries. We support both Hotspot and Eclipse OpenJ9 VMs.

Supported Architectures

Supported OS

Alpine centos clefos debian debianslim leap tumbleweed ubi ubi-minimal ubuntu(*)
3.14 7 7 buster buster-slim 15.3 latest 8.4 8.4 20.04

Note: Hotspot is not supported on Ubuntu 20.04 for s390x arch.

musl libc based Alpine Images

Starting from Java 16, hotspot builds are available natively built on musl libc instead of the regular glibc as part of the AdoptOpenJDK project. Currently these are available only for the x86_64 architecture. Accordingly we now have both regular and slim Docker Images for alpine musl based hotspot on x86_64.

Official and Non-official Images

AdoptOpenJDK Docker Images are available as both Official Images (Maintained by Docker) and Non-official Images (Maintained by AdoptOpenJDK). Please choose based on your requirements.

Unofficial Images: Docker Image Build Types and Associated Tags

Legend

  1. There are two kinds of build images
    • Release build images
      • These are release tested versions of the JDKs.
      • Associated tags:
      • latest, ${os}, ${jdk-version}, ${jdk-version}-${os}
      • jre, ${os}-jre, ${jre-version}, ${jre-version}-${os}
      • slim, ${slim-os}-slim, ${jdk-version}-slim, ${jdk-version}-${slim-os}-slim
    • Nightly build images
      • These are nightly builds with minimal testing.
      • Associated tags:
      • nightly, ${os}-nightly, ${jdk-version}-${os}-nightly
      • jre-nightly, ${os}-jre-nightly, ${jre-version}-${os}-nightly
      • nightly-slim, ${slim-os}-nightly-slim, ${jdk-version}-${slim-os}-nightly-slim
  2. There are two build types
    • Full build images
      • This consists of the full JDK.
      • Associated tags:
      • latest, ${os}, ${jdk-version}, ${jdk-version}-${os}
      • jre, ${os}-jre, ${jre-version}, ${jre-version}-${os}
      • nightly, ${os}-nightly, ${jdk-version}-nightly, ${jdk-version}-${os}-nightly
      • jre-nightly, ${os}-jre-nightly, ${jre-version}-nightly, ${jre-version}-${os}-nightly
    • Slim build images
      • These are stripped down JDK builds that remove functionality not typically needed while running in a cloud. See the ./slim-java.sh script to see what is stripped out.
      • Associated tags:
      • slim, ${slim-os}-slim, ${jdk-version}-slim, ${jdk-version}-${slim-os}-slim
      • nightly-slim, ${slim-os}-nightly-slim, ${jdk-version}-nightly-slim, ${jdk-version}-${slim-os}-nightly-slim
  3. There are also JDK and JRE only variants
    • JDK build images
      • This consists of the full JDK.
      • Associated tags:
      • latest, ${os}, ${jdk-version}, ${jdk-version}-${os}
      • slim, ${slim-os}-slim, ${jdk-version}-slim, ${jdk-version}-${slim-os}-slim
      • nightly, ${os}-nightly, ${jdk-version}-nightly, ${jdk-version}-${os}-nightly
      • nightly-slim, ${slim-os}-nightly-slim, ${jdk-version}-nightly-slim, ${jdk-version}-${slim-os}-nightly-slim
    • JRE build images
      • This consists of only JRE.
      • Associated tags:
      • jre, ${os}-jre, ${jre-version}, ${jre-version}-${os}
      • jre-nightly, ${os}-jre-nightly, ${jre-version}-nightly, ${jre-version}-${os}-nightly

Here is a listing of the image sizes for the various build images and types for JDK Version 8

VMs latest slim nightly nightly-slim alpine alpine-slim alpine-nightly alpine-nightly-slim
OpenJ9 339MB 251MB 344MB 250MB 208MB 120MB 213MB 118MB
Hotspot 324MB 238MB 324MB 238MB 193MB 106MB 193MB 106MB

Notes:

  1. The alpine-slim images are about 60% smaller than the latest images.
  2. The Alpine Linux and the slim images are not yet TCK certified.

Build and push the Images with multi-arch support

# Steps 1-2 needs to be run on all supported arches.
# i.e aarch64, ppc64le, s390x and x86_64.

# 1. Clone this github repo
     $ git clone https://github.com/AdoptOpenJDK/openjdk-docker

# 2. Build images and tag them appropriately
     $ cd openjdk-docker
     $ ./build_all.sh

# Steps 3 needs to be run only on x86_64

# 3. build_all.sh should be run on all supported architectures to build and push images to the
#    docker registry. The images should now be available on hub.docker.com but without multi-arch
#    support. To add multi-arch support, we need to generate the right manifest lists and push them
#    to hub.docker.com. The script generate_manifest_script.sh can be used to
#    generate the right manifest commands. This needs to be run only on x86_64 after docker images
#    for all architecures have been built and made available on hub.docker.com
     $ ./update_manifest_all.sh

# We should now have the proper manifest lists pushed to hub.docker.com to support multi-arch pulls.

Info on other scripts

Config Files

The config dir consists of configuration files used by the scripts to determine the supported combinations of Version / OS / VM / Package / Build types and Architectures for both Official/Unofficial images as well as the corresponding tags.

Mac OS X

Please note you'll need to upgrade bash shell on Mac OS X if you're to use our Docker images on there.

License

The Dockerfiles and associated scripts found in this project are licensed under the Apache License 2.0..