18
18
# License along with this library; if not, write to the Free Software
19
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
20
#
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
- #
46
21
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
52
30
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
54
33
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
60
54
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
66
60
67
61
# Copy Elemental
68
62
COPY LICENSE /elemental/LICENSE
69
63
COPY autodeploy /elemental/autodeploy
70
64
COPY etc /elemental/etc
71
65
COPY lib /elemental/lib
72
- COPY logs /elemental/logs
73
-
66
+ COPY --chown=nonroot logs /elemental/logs
67
+ COPY --chown=nonroot logs /elemental/data
74
68
75
69
# Build-time metadata as defined at http://label-schema.org
76
70
# and used by autobuilder @hooks/build
@@ -90,27 +84,15 @@ ARG CACHE_MEM
90
84
ARG MAX_BROKER
91
85
ARG JVM_MAX_RAM_PERCENTAGE
92
86
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"
114
96
115
97
HEALTHCHECK CMD [ "java" , \
116
98
"org.exist.start.Main" , "client" , \
0 commit comments