1818# License along with this library; if not, write to the Free Software
1919# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2020#
21- # NOTE: Parts of this file contain code from 'The eXist-db Authors'.
22- # The original license header is included below.
23- #
24- # =====================================================================
25- #
26- # eXist-db Open Source Native XML Database
27- # Copyright (C) 2001 The eXist-db Authors
28- #
29- 30- # http://www.exist-db.org
31- #
32- # This library is free software; you can redistribute it and/or
33- # modify it under the terms of the GNU Lesser General Public
34- # License as published by the Free Software Foundation; either
35- # version 2.1 of the License, or (at your option) any later version.
36- #
37- # This library is distributed in the hope that it will be useful,
38- # but WITHOUT ANY WARRANTY; without even the implied warranty of
39- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
40- # Lesser General Public License for more details.
41- #
42- # You should have received a copy of the GNU Lesser General Public
43- # License along with this library; if not, write to the Free Software
44- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
45- #
4621
47- # Use Debian Bullseye (which is the base of gcr.io/distroless/java:17) for additional library dependencies that we need
48- # FROM debian:bullseye-slim as debian-slim
49- # RUN apt-get update && apt-get -y dist-upgrade
50- # RUN apt-get install -y openjdk-17-jre-headless
51- # RUN apt-get install -y expat fontconfig # Install tools required by FOP
22+ # Install latest JRE 17 in Chainguard Wolfi temporary builder image
23+ FROM cgr.dev/chainguard/wolfi-base AS builder
24+
25+ RUN apk update && apk upgrade
26+ # Install dependencies needed for JRE
27+ RUN apk add zlib libjpeg-turbo libpng lcms2 freetype ttf-dejavu fontconfig-config libfontconfig1 expat libuuid libbrotlicommon1 libbrotlidec1 libbrotlienc1 libcrypt1
28+ # Install latest JRE
29+ RUN apk add openjdk-17-jre
5230
53- FROM gcr.io/distroless/java17:latest
31+ # Use Chainguard distroless glibc base for dynamically linked libraries
32+ FROM cgr.dev/chainguard/glibc-dynamic:latest
5433
55- # Copy over dependencies for Apache FOP, missing from GCR's JRE
56- # COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/lib/x86_64-linux-gnu/libfreetype.so.6
57- # COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/liblcms2.so.2 /usr/lib/x86_64-linux-gnu/liblcms2.so.2
58- # COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng16.so.16
59- # COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
34+ # Copy over dependencies for updated JRE from Wolfi
35+ COPY --from=builder /etc/ca-certificates /etc/ca-certificates
36+ COPY --from=builder /etc/ca-certificates.conf /etc/ca-certificates.conf
37+ COPY --from=builder /lib/libz.so.1 /lib/libz.so.1
38+ COPY --from=builder /usr/lib/libjpeg.so.8 /usr/lib/libjpeg.so.8
39+ COPY --from=builder /usr/lib/libturbojpeg.so.0 /usr/lib/libturbojpeg.so.0
40+ COPY --from=builder /usr/lib/libpng16.so.16 /usr/lib/libpng16.so.16
41+ COPY --from=builder /usr/lib/liblcms2.so.2 /usr/lib/liblcms2.so.2
42+ COPY --from=builder /usr/lib/libfreetype.so.6 /usr/lib/libfreetype.so.6
43+ COPY --from=builder /usr/share/fonts /usr/share/fonts
44+ COPY --from=builder /etc/fonts /etc/fonts
45+ COPY --from=builder /usr/share/fontconfig /usr/share/fontconfig
46+ COPY --from=builder /usr/share/gettext /usr/share/gettext
47+ COPY --from=builder /usr/share/xml /usr/share/xml
48+ COPY --from=builder /usr/lib/libfontconfig.so.1 /usr/lib/libfontconfig.so.1
49+ COPY --from=builder /usr/lib/libexpat.so.1 /usr/lib/libexpat.so.1
50+ COPY --from=builder /usr/lib/libuuid.so.1 /usr/lib/libuuid.so.1
51+ COPY --from=builder /usr/lib/libbrotlicommon.so.1 /usr/lib/libbrotlicommon.so.1
52+ COPY --from=builder /usr/lib/libbrotlidec.so.1 /usr/lib/libbrotlidec.so.1
53+ COPY --from=builder /usr/lib/libbrotlienc.so.1 /usr/lib/libbrotlienc.so.1
6054
61- # Copy dependencies for Apache Batik (used by Apache FOP to handle SVG rendering)
62- # COPY --from=debian-slim /etc/fonts /etc/fonts
63- # COPY --from=debian-slim /lib/x86_64-linux-gnu/libexpat.so.1 /lib/x86_64-linux-gnu/libexpat.so.1
64- # COPY --from=debian-slim /usr/share/fontconfig /usr/share/fontconfig
65- # COPY --from=debian-slim /usr/share/fonts/truetype/dejavu /usr/share/fonts/truetype/dejavu
55+ # Copy over updated JRE from Wolfi
56+ COPY --from=builder /usr/lib/jvm/java-17-openjdk /usr/lib/jvm/java-17-openjdk
57+
58+ # Switch to nonroot user
59+ USER nonroot
6660
6761# Copy Elemental
6862COPY LICENSE /elemental/LICENSE
6963COPY autodeploy /elemental/autodeploy
7064COPY etc /elemental/etc
7165COPY lib /elemental/lib
72- COPY logs /elemental/logs
73-
66+ COPY --chown=nonroot logs /elemental/logs
67+ COPY --chown=nonroot logs /elemental/data
7468
7569# Build-time metadata as defined at http://label-schema.org
7670# and used by autobuilder @hooks/build
@@ -90,27 +84,15 @@ ARG CACHE_MEM
9084ARG MAX_BROKER
9185ARG JVM_MAX_RAM_PERCENTAGE
9286
93- ENV ELEMENTAL_HOME "/elemental"
94- ENV EXIST_HOME "/elemental"
95- ENV CLASSPATH=/elemental/lib/${elemental.uber.jar.filename}
96-
97- ENV JAVA_TOOL_OPTIONS \
98- -Dfile.encoding=UTF8 \
99- -Dsun.jnu.encoding=UTF-8 \
100- -Djava.awt.headless=true \
101- -Dorg.exist.db-connection.cacheSize=${CACHE_MEM:-256}M \
102- -Dorg.exist.db-connection.pool.max=${MAX_BROKER:-20} \
103- -Dlog4j.configurationFile=/elemental/etc/log4j2.xml \
104- -Dexist.home=/elemental \
105- -Dexist.configurationFile=/elemental/etc/conf.xml \
106- -Djetty.home=/elemental \
107- -Dexist.jetty.config=/elemental/etc/jetty/standard.enabled-jetty-configs \
108- -XX:+UseNUMA \
109- -XX:+UseZGC \
110- -XX:+UseStringDeduplication \
111- -XX:+UseContainerSupport \
112- -XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} \
113- -XX:+ExitOnOutOfMemoryError
87+ ENV ELEMENTAL_HOME="/elemental"
88+ ENV EXIST_HOME="/elemental"
89+ ENV CLASSPATH="/elemental/lib/${elemental.uber.jar.filename}"
90+
91+ ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk"
92+
93+ ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF-8 -Djava.awt.headless=true -Dorg.exist.db-connection.cacheSize=${CACHE_MEM:-256}M -Dorg.exist.db-connection.pool.max=${MAX_BROKER:-20} -Dlog4j.configurationFile=/elemental/etc/log4j2.xml -Dexist.home=/elemental -Dexist.configurationFile=/elemental/etc/conf.xml -Djetty.home=/elemental -Dexist.jetty.config=/elemental/etc/jetty/standard.enabled-jetty-configs -XX:+UseNUMA -XX:+UseZGC -XX:+UseContainerSupport -XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} -XX:+ExitOnOutOfMemoryError"
94+
95+ ENV PATH="/usr/lib/jvm/java-17-openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
11496
11597HEALTHCHECK CMD [ "java" , \
11698 "org.exist.start.Main" , "client" , \
0 commit comments