Skip to content

Commit 3d26403

Browse files
committed
Add Debian variants of Oracle-consuming versions
These are images based on the official JDK artifacts for 12+ released on https://jdk.java.net/ with a Debian base in addition to Oracle.
1 parent ed26879 commit 3d26403

File tree

8 files changed

+501
-8
lines changed

8 files changed

+501
-8
lines changed

.travis.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@ matrix:
55
include:
66
- os: linux
77
env: VERSION=14 VARIANT=oracle
8+
- os: linux
9+
env: VERSION=14
10+
- os: linux
11+
env: VERSION=14 VARIANT=slim
812
- os: linux
913
env: VERSION=14 VARIANT=alpine
1014
- os: windows
1115
dist: 1803-containers
1216
env: VERSION=14 VARIANT=windows/windowsservercore-1803
1317
- os: linux
1418
env: VERSION=13 VARIANT=oracle
19+
- os: linux
20+
env: VERSION=13
21+
- os: linux
22+
env: VERSION=13 VARIANT=slim
1523
- os: windows
1624
dist: 1803-containers
1725
env: VERSION=13 VARIANT=windows/windowsservercore-1803

13/jdk/Dockerfile

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
FROM buildpack-deps:buster-scm
2+
3+
RUN set -eux; \
4+
apt-get update; \
5+
apt-get install -y --no-install-recommends \
6+
bzip2 \
7+
unzip \
8+
xz-utils \
9+
\
10+
# utilities for keeping Debian and OpenJDK CA certificates in sync
11+
ca-certificates p11-kit \
12+
\
13+
# jlink --strip-debug on 13+ needs objcopy: https://github.com/docker-library/openjdk/issues/351
14+
# Error: java.io.IOException: Cannot run program "objcopy": error=2, No such file or directory
15+
binutils \
16+
# java.lang.UnsatisfiedLinkError: /usr/local/openjdk-11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory
17+
# java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
18+
# https://github.com/docker-library/openjdk/pull/235#issuecomment-424466077
19+
fontconfig libfreetype6 \
20+
; \
21+
rm -rf /var/lib/apt/lists/*
22+
23+
# Default to UTF-8 file.encoding
24+
ENV LANG C.UTF-8
25+
26+
ENV JAVA_HOME /usr/java/openjdk-13
27+
ENV PATH $JAVA_HOME/bin:$PATH
28+
29+
# backwards compatibility shim
30+
RUN { echo '#/bin/sh'; echo 'echo "$JAVA_HOME"'; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && [ "$JAVA_HOME" = "$(docker-java-home)" ]
31+
32+
# https://jdk.java.net/
33+
ENV JAVA_VERSION 13
34+
ENV JAVA_URL https://download.java.net/java/GA/jdk13/5b8a42f3905b406298b72d750b6919f6/33/GPL/openjdk-13_linux-x64_bin.tar.gz
35+
ENV JAVA_SHA256 5f547b8f0ffa7da517223f6f929a5055d749776b1878ccedbd6cc1334f4d6f4d
36+
37+
RUN set -eux; \
38+
\
39+
wget -O openjdk.tgz "$JAVA_URL"; \
40+
echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
41+
\
42+
mkdir -p "$JAVA_HOME"; \
43+
tar --extract \
44+
--file openjdk.tgz \
45+
--directory "$JAVA_HOME" \
46+
--strip-components 1 \
47+
--no-same-owner \
48+
; \
49+
rm openjdk.tgz; \
50+
\
51+
# update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store)
52+
# see https://github.com/docker-library/openjdk/issues/327
53+
# http://rabexc.org/posts/certificates-not-working-java#comment-4099504075
54+
# https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in
55+
# https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29
56+
{ \
57+
echo '#!/usr/bin/env bash'; \
58+
echo 'set -Eeuo pipefail'; \
59+
echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \
60+
# 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory)
61+
echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \
62+
echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \
63+
echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \
64+
} > /etc/ca-certificates/update.d/docker-openjdk; \
65+
chmod +x /etc/ca-certificates/update.d/docker-openjdk; \
66+
/etc/ca-certificates/update.d/docker-openjdk; \
67+
\
68+
# https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472
69+
find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
70+
ldconfig; \
71+
\
72+
# https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840
73+
# https://openjdk.java.net/jeps/341
74+
java -Xshare:dump; \
75+
\
76+
# basic smoke test
77+
javac --version; \
78+
java --version
79+
80+
# "jshell" is an interactive REPL for Java (see https://en.wikipedia.org/wiki/JShell)
81+
CMD ["jshell"]

13/jdk/slim/Dockerfile

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
FROM debian:buster-slim
2+
3+
RUN set -eux; \
4+
apt-get update; \
5+
apt-get install -y --no-install-recommends \
6+
# utilities for keeping Debian and OpenJDK CA certificates in sync
7+
ca-certificates p11-kit \
8+
; \
9+
rm -rf /var/lib/apt/lists/*
10+
11+
# Default to UTF-8 file.encoding
12+
ENV LANG C.UTF-8
13+
14+
ENV JAVA_HOME /usr/java/openjdk-13
15+
ENV PATH $JAVA_HOME/bin:$PATH
16+
17+
# backwards compatibility shim
18+
RUN { echo '#/bin/sh'; echo 'echo "$JAVA_HOME"'; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && [ "$JAVA_HOME" = "$(docker-java-home)" ]
19+
20+
# https://jdk.java.net/
21+
ENV JAVA_VERSION 13
22+
ENV JAVA_URL https://download.java.net/java/GA/jdk13/5b8a42f3905b406298b72d750b6919f6/33/GPL/openjdk-13_linux-x64_bin.tar.gz
23+
ENV JAVA_SHA256 5f547b8f0ffa7da517223f6f929a5055d749776b1878ccedbd6cc1334f4d6f4d
24+
25+
RUN set -eux; \
26+
\
27+
savedAptMark="$(apt-mark showmanual)"; \
28+
apt-get update; \
29+
apt-get install -y --no-install-recommends \
30+
wget \
31+
; \
32+
rm -rf /var/lib/apt/lists/*; \
33+
\
34+
wget -O openjdk.tgz "$JAVA_URL"; \
35+
echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
36+
\
37+
mkdir -p "$JAVA_HOME"; \
38+
tar --extract \
39+
--file openjdk.tgz \
40+
--directory "$JAVA_HOME" \
41+
--strip-components 1 \
42+
--no-same-owner \
43+
; \
44+
rm openjdk.tgz; \
45+
\
46+
apt-mark auto '.*' > /dev/null; \
47+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
48+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
49+
\
50+
# update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store)
51+
# see https://github.com/docker-library/openjdk/issues/327
52+
# http://rabexc.org/posts/certificates-not-working-java#comment-4099504075
53+
# https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in
54+
# https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29
55+
{ \
56+
echo '#!/usr/bin/env bash'; \
57+
echo 'set -Eeuo pipefail'; \
58+
echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \
59+
# 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory)
60+
echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \
61+
echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \
62+
echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \
63+
} > /etc/ca-certificates/update.d/docker-openjdk; \
64+
chmod +x /etc/ca-certificates/update.d/docker-openjdk; \
65+
/etc/ca-certificates/update.d/docker-openjdk; \
66+
\
67+
# https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472
68+
find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
69+
ldconfig; \
70+
\
71+
# https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840
72+
# https://openjdk.java.net/jeps/341
73+
java -Xshare:dump; \
74+
\
75+
# basic smoke test
76+
javac --version; \
77+
java --version
78+
79+
# "jshell" is an interactive REPL for Java (see https://en.wikipedia.org/wiki/JShell)
80+
CMD ["jshell"]

14/jdk/Dockerfile

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
FROM buildpack-deps:buster-scm
2+
3+
RUN set -eux; \
4+
apt-get update; \
5+
apt-get install -y --no-install-recommends \
6+
bzip2 \
7+
unzip \
8+
xz-utils \
9+
\
10+
# utilities for keeping Debian and OpenJDK CA certificates in sync
11+
ca-certificates p11-kit \
12+
\
13+
# jlink --strip-debug on 13+ needs objcopy: https://github.com/docker-library/openjdk/issues/351
14+
# Error: java.io.IOException: Cannot run program "objcopy": error=2, No such file or directory
15+
binutils \
16+
# java.lang.UnsatisfiedLinkError: /usr/local/openjdk-11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory
17+
# java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
18+
# https://github.com/docker-library/openjdk/pull/235#issuecomment-424466077
19+
fontconfig libfreetype6 \
20+
; \
21+
rm -rf /var/lib/apt/lists/*
22+
23+
# Default to UTF-8 file.encoding
24+
ENV LANG C.UTF-8
25+
26+
ENV JAVA_HOME /usr/java/openjdk-14
27+
ENV PATH $JAVA_HOME/bin:$PATH
28+
29+
# backwards compatibility shim
30+
RUN { echo '#/bin/sh'; echo 'echo "$JAVA_HOME"'; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && [ "$JAVA_HOME" = "$(docker-java-home)" ]
31+
32+
# https://jdk.java.net/
33+
ENV JAVA_VERSION 14-ea+14
34+
ENV JAVA_URL https://download.java.net/java/early_access/jdk14/14/GPL/openjdk-14-ea+14_linux-x64_bin.tar.gz
35+
ENV JAVA_SHA256 fc1aed4e0de423dbb27db449b63b25c61b06b80e275f7ef665cce6c61e736726
36+
37+
RUN set -eux; \
38+
\
39+
wget -O openjdk.tgz "$JAVA_URL"; \
40+
echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
41+
\
42+
mkdir -p "$JAVA_HOME"; \
43+
tar --extract \
44+
--file openjdk.tgz \
45+
--directory "$JAVA_HOME" \
46+
--strip-components 1 \
47+
--no-same-owner \
48+
; \
49+
rm openjdk.tgz; \
50+
\
51+
# update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store)
52+
# see https://github.com/docker-library/openjdk/issues/327
53+
# http://rabexc.org/posts/certificates-not-working-java#comment-4099504075
54+
# https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in
55+
# https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29
56+
{ \
57+
echo '#!/usr/bin/env bash'; \
58+
echo 'set -Eeuo pipefail'; \
59+
echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \
60+
# 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory)
61+
echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \
62+
echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \
63+
echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \
64+
} > /etc/ca-certificates/update.d/docker-openjdk; \
65+
chmod +x /etc/ca-certificates/update.d/docker-openjdk; \
66+
/etc/ca-certificates/update.d/docker-openjdk; \
67+
\
68+
# https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472
69+
find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
70+
ldconfig; \
71+
\
72+
# https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840
73+
# https://openjdk.java.net/jeps/341
74+
java -Xshare:dump; \
75+
\
76+
# basic smoke test
77+
javac --version; \
78+
java --version
79+
80+
# "jshell" is an interactive REPL for Java (see https://en.wikipedia.org/wiki/JShell)
81+
CMD ["jshell"]

14/jdk/slim/Dockerfile

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
FROM debian:buster-slim
2+
3+
RUN set -eux; \
4+
apt-get update; \
5+
apt-get install -y --no-install-recommends \
6+
# utilities for keeping Debian and OpenJDK CA certificates in sync
7+
ca-certificates p11-kit \
8+
; \
9+
rm -rf /var/lib/apt/lists/*
10+
11+
# Default to UTF-8 file.encoding
12+
ENV LANG C.UTF-8
13+
14+
ENV JAVA_HOME /usr/java/openjdk-14
15+
ENV PATH $JAVA_HOME/bin:$PATH
16+
17+
# backwards compatibility shim
18+
RUN { echo '#/bin/sh'; echo 'echo "$JAVA_HOME"'; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && [ "$JAVA_HOME" = "$(docker-java-home)" ]
19+
20+
# https://jdk.java.net/
21+
ENV JAVA_VERSION 14-ea+14
22+
ENV JAVA_URL https://download.java.net/java/early_access/jdk14/14/GPL/openjdk-14-ea+14_linux-x64_bin.tar.gz
23+
ENV JAVA_SHA256 fc1aed4e0de423dbb27db449b63b25c61b06b80e275f7ef665cce6c61e736726
24+
25+
RUN set -eux; \
26+
\
27+
savedAptMark="$(apt-mark showmanual)"; \
28+
apt-get update; \
29+
apt-get install -y --no-install-recommends \
30+
wget \
31+
; \
32+
rm -rf /var/lib/apt/lists/*; \
33+
\
34+
wget -O openjdk.tgz "$JAVA_URL"; \
35+
echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
36+
\
37+
mkdir -p "$JAVA_HOME"; \
38+
tar --extract \
39+
--file openjdk.tgz \
40+
--directory "$JAVA_HOME" \
41+
--strip-components 1 \
42+
--no-same-owner \
43+
; \
44+
rm openjdk.tgz; \
45+
\
46+
apt-mark auto '.*' > /dev/null; \
47+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
48+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
49+
\
50+
# update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store)
51+
# see https://github.com/docker-library/openjdk/issues/327
52+
# http://rabexc.org/posts/certificates-not-working-java#comment-4099504075
53+
# https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in
54+
# https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29
55+
{ \
56+
echo '#!/usr/bin/env bash'; \
57+
echo 'set -Eeuo pipefail'; \
58+
echo 'if ! [ -d "$JAVA_HOME" ]; then echo >&2 "error: missing JAVA_HOME environment variable"; exit 1; fi'; \
59+
# 8-jdk uses "$JAVA_HOME/jre/lib/security/cacerts" and 8-jre and 11+ uses "$JAVA_HOME/lib/security/cacerts" directly (no "jre" directory)
60+
echo 'cacertsFile=; for f in "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/jre/lib/security/cacerts"; do if [ -e "$f" ]; then cacertsFile="$f"; break; fi; done'; \
61+
echo 'if [ -z "$cacertsFile" ] || ! [ -f "$cacertsFile" ]; then echo >&2 "error: failed to find cacerts file in $JAVA_HOME"; exit 1; fi'; \
62+
echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$cacertsFile"'; \
63+
} > /etc/ca-certificates/update.d/docker-openjdk; \
64+
chmod +x /etc/ca-certificates/update.d/docker-openjdk; \
65+
/etc/ca-certificates/update.d/docker-openjdk; \
66+
\
67+
# https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472
68+
find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \
69+
ldconfig; \
70+
\
71+
# https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840
72+
# https://openjdk.java.net/jeps/341
73+
java -Xshare:dump; \
74+
\
75+
# basic smoke test
76+
javac --version; \
77+
java --version
78+
79+
# "jshell" is an interactive REPL for Java (see https://en.wikipedia.org/wiki/JShell)
80+
CMD ["jshell"]

0 commit comments

Comments
 (0)