Skip to content

Commit

Permalink
feat: add multi arch support for java 21
Browse files Browse the repository at this point in the history
  • Loading branch information
kishansairam9 committed Feb 6, 2024
1 parent 7ba9a17 commit 5032c57
Showing 1 changed file with 31 additions and 16 deletions.
47 changes: 31 additions & 16 deletions java-21/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ FROM azul/zulu-openjdk-debian:${JAVA_VERSION} AS jre
# Needed for --strip-debug
RUN apt-get -y update && apt-get -y install binutils

# Included modules cherrypicked from https://docs.oracle.com/en/java/javase/11/docs/api/
# Included modules cherrypicked from https://docs.oracle.com/en/java/javase/21/docs/api/
#
# jdk.unsupported is undocumented but contains Unsafe, which is used by several dependencies to
# improve performance.
Expand Down Expand Up @@ -46,33 +46,48 @@ jdk.zipfs\
# Extract java SSL certs
FROM gcr.io/distroless/java-base-debian12:debug AS ssl

FROM amd64/debian:bookworm-slim As builder
FROM debian:bookworm-slim AS builder
RUN apt update && apt install -y libjemalloc-dev

# Debian-12 image
FROM gcr.io/distroless/cc-debian12:debug

MAINTAINER Hypertrace "https://www.hypertrace.org/"
# stage for amd64
FROM gcr.io/distroless/cc-debian12:debug AS base-amd64

SHELL ["/busybox/sh", "-c"]

RUN ln -s /busybox/sh /bin/sh

COPY --from=ssl /etc/ssl/certs/java /etc/ssl/certs/java

COPY --from=jre /lib/x86_64-linux-gnu/libz.so.1.2.11 /lib/x86_64-linux-gnu/libz.so.1.2.11
RUN ln -s /lib/x86_64-linux-gnu/libz.so.1.2.11 /lib/x86_64-linux-gnu/libz.so.1

COPY --from=jre /jre /usr/lib/jvm/zulu-21-amd64-slim
RUN ln -s /usr/lib/jvm/zulu-21-amd64-slim/bin/java /usr/bin/java
RUN ln -s /usr/lib/jvm/zulu-21-amd64-slim/bin/jfr /usr/bin/jfr

# change rocksdb default memory allocator
# https://docs.confluent.io/platform/current/streams/developer-guide/memory-mgmt.html#rocksdb
# change default memory allocator to jemalloc
COPY --from=builder /usr/lib/x86_64-linux-gnu/libjemalloc* /usr/lib/x86_64-linux-gnu/
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so

# stage for arm64
FROM gcr.io/distroless/cc-debian12:debug AS base-arm64

SHELL ["/busybox/sh", "-c"]
RUN ln -s /busybox/sh /bin/sh

COPY --from=jre /lib/aarch64-linux-gnu/libz.so.1.2.11 /lib/aarch64-linux-gnu/libz.so.1.2.11
RUN ln -s /lib/aarch64-linux-gnu/libz.so.1.2.11 /lib/aarch64-linux-gnu/libz.so.1

# change default memory allocator to jemalloc
COPY --from=builder /usr/lib/aarch64-linux-gnu/libjemalloc* /usr/lib/aarch64-linux-gnu/
ENV LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so

# final image
ARG TARGETARCH
FROM base-${TARGETARCH}

MAINTAINER Hypertrace "https://www.hypertrace.org/"

COPY --from=ssl /etc/ssl/certs/java /etc/ssl/certs/java

COPY --from=jre /jre /usr/lib/jvm/zulu-21-slim
RUN ln -s /usr/lib/jvm/zulu-21-slim/bin/java /usr/bin/java
RUN ln -s /usr/lib/jvm/zulu-21-slim/bin/jfr /usr/bin/jfr

# set JAVA_HOME
ENV JAVA_HOME=/usr/lib/jvm/zulu-21-amd64-slim
ENV JAVA_HOME=/usr/lib/jvm/zulu-21-slim

ENTRYPOINT ["/usr/bin/java", "-jar"]

0 comments on commit 5032c57

Please sign in to comment.