19
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
20
#
21
21
22
+ # ## START: Container build time args for Elemental Server
23
+ # #
24
+ # Names of the Linux user account and group to run the Elemental Server service under
25
+ ARG ELEMENTAL_SERVER_SERVICE_ACCOUNT="edb01"
26
+ ARG ELEMENTAL_SERVER_SERVICE_GROUP="edb01"
27
+
28
+ # Elemental data cache size
29
+ ARG ELEMENTAL_SERVER_CACHE_MEM="256"
30
+ # Elemental maximum number of database brokers
31
+ ARG ELEMENTAL_SERVER_MAX_BROKER="20"
32
+ # #
33
+ # ## END: Container build time args for Elemental Server
34
+
35
+ # ## START: Container build time args for JVM (Java Virtual Machine)
36
+ # #
37
+ # JVM maximum RAM use (as a percentage of RAM available to the Docker Container)
38
+ ARG JVM_MAX_RAM_PERCENTAGE="75.0"
39
+ # JVM Garbage Collector
40
+ ARG JVM_GC="Z"
41
+
42
+ # Any additional options to be added to the JAVA_TOOL_OPTIONS Environment Variable for the JVM
43
+ ARG ADDITIONAL_JAVA_TOOL_OPTIONS
44
+ # #
45
+ # ## END: Container build time args for JVM (Java Virtual Machine)
46
+
22
47
# Install latest JRE 21 in Chainguard Wolfi temporary builder image
23
48
FROM cgr.dev/chainguard/wolfi-base AS builder
24
49
50
+ # Inherit global args to this build stage
51
+ ARG ELEMENTAL_SERVER_SERVICE_ACCOUNT
52
+ ARG ELEMENTAL_SERVER_SERVICE_GROUP
53
+
25
54
RUN apk update && apk upgrade
26
55
# 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
56
+ RUN apk add tzdata zlib libjpeg-turbo libpng lcms2 freetype ttf-dejavu fontconfig-config libfontconfig1 expat libuuid libbrotlicommon1 libbrotlidec1 libbrotlienc1 libcrypt1
57
+ # Install latest CA certificates
58
+ RUN apk add ca-certificates java-cacerts
28
59
# Install latest JRE
29
60
RUN apk add openjdk-21-jre
30
61
62
+ # Add Elemental Server service group and account
63
+ RUN addgroup -S ${ELEMENTAL_SERVER_SERVICE_GROUP} \
64
+ && adduser -S -G ${ELEMENTAL_SERVER_SERVICE_GROUP} -H -h /nonexistent -s /sbin/nologin -g "Elemental Database Server - Instance 01" ${ELEMENTAL_SERVER_SERVICE_ACCOUNT}
65
+
66
+
31
67
# Use Chainguard distroless glibc base for dynamically linked libraries
32
68
FROM cgr.dev/chainguard/glibc-dynamic:latest
33
69
70
+ # Inherit global args to this build stage
71
+ ARG ELEMENTAL_SERVER_SERVICE_ACCOUNT
72
+ ARG ELEMENTAL_SERVER_SERVICE_GROUP
73
+ ARG ELEMENTAL_SERVER_CACHE_MEM
74
+ ARG ELEMENTAL_SERVER_MAX_BROKER
75
+ ARG JVM_MAX_RAM_PERCENTAGE
76
+ ARG JVM_GC
77
+ ARG ADDITIONAL_JAVA_TOOL_OPTIONS
78
+
34
79
# 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
80
+ COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
37
81
COPY --from=builder /lib/libz.so.1 /lib/libz.so.1
38
82
COPY --from=builder /usr/lib/libjpeg.so.8 /usr/lib/libjpeg.so.8
39
83
COPY --from=builder /usr/lib/libturbojpeg.so.0 /usr/lib/libturbojpeg.so.0
@@ -52,19 +96,33 @@ COPY --from=builder /usr/lib/libbrotlicommon.so.1 /usr/lib/libbrotlicommon.so.1
52
96
COPY --from=builder /usr/lib/libbrotlidec.so.1 /usr/lib/libbrotlidec.so.1
53
97
COPY --from=builder /usr/lib/libbrotlienc.so.1 /usr/lib/libbrotlienc.so.1
54
98
99
+ # Copy over certificates for updated JRE from Wolfi
100
+ COPY --from=builder /etc/ca-certificates /etc/ca-certificates
101
+ COPY --from=builder /etc/ca-certificates.conf /etc/ca-certificates.conf
102
+ COPY --from=builder /etc/apk/protected_paths.d/ca-certificates.list /etc/apk/protected_paths.d/ca-certificates.list
103
+ COPY --from=builder /etc/ssl /etc/ssl
104
+ COPY --from=builder /etc/pki /etc/pki
105
+ COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates
106
+
55
107
# Copy over updated JRE from Wolfi
56
108
COPY --from=builder /usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21-openjdk
57
109
58
- # Switch to nonroot user
59
- USER nonroot
110
+ # Copy Elemental Server service group and account
111
+ COPY --from=builder --chown=root:root --chmod=0644 /etc/passwd /etc/passwd
112
+ COPY --from=builder --chown=root:root --chmod=0644 /etc/group /etc/group
113
+ COPY --from=builder --chown=root:root --chmod=0600 /etc/shadow /etc/shadow
114
+
115
+ # Switch to Elemental Server service account
116
+ USER ${ELEMENTAL_SERVER_SERVICE_ACCOUNT}
60
117
61
118
# Copy Elemental
62
- COPY LICENSE /elemental/LICENSE
63
- COPY autodeploy /elemental/autodeploy
64
- COPY etc /elemental/etc
65
- COPY lib /elemental/lib
66
- COPY --chown=nonroot logs /elemental/logs
67
- COPY --chown=nonroot logs /elemental/data
119
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0555 logs /elemental
120
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0444 LICENSE /elemental/LICENSE
121
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0570 autodeploy /elemental/autodeploy
122
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0570 etc /elemental/etc
123
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0550 lib /elemental/lib
124
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0750 logs /elemental/logs
125
+ COPY --chown=${ELEMENTAL_SERVER_SERVICE_ACCOUNT}:${ELEMENTAL_SERVER_SERVICE_GROUP} --chmod=0750 logs /elemental/data
68
126
69
127
# Build-time metadata as defined at http://label-schema.org
70
128
# and used by autobuilder @hooks/build
@@ -79,18 +137,13 @@ LABEL org.label-schema.build-date=${maven.build.timestamp} \
79
137
80
138
EXPOSE 8080 8443
81
139
82
- # make CACHE_MEM, MAX_BROKER, and JVM_MAX_RAM_PERCENTAGE available to users
83
- ARG CACHE_MEM
84
- ARG MAX_BROKER
85
- ARG JVM_MAX_RAM_PERCENTAGE
86
-
87
140
ENV ELEMENTAL_HOME="/elemental"
88
141
ENV EXIST_HOME="/elemental"
89
142
ENV CLASSPATH="/elemental/lib/${elemental.uber.jar.filename}"
90
143
91
144
ENV JAVA_HOME="/usr/lib/jvm/java-21-openjdk"
92
145
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"
146
+ ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF-8 -Djava.awt.headless=true -Dorg.exist.db-connection.cacheSize=${ELEMENTAL_SERVER_CACHE_MEM }M -Dorg.exist.db-connection.pool.max=${ELEMENTAL_SERVER_MAX_BROKER } -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:+Use${JVM_GC}GC -XX:+UseContainerSupport -XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE} -XX:+ExitOnOutOfMemoryError ${ADDITIONAL_JAVA_TOOL_OPTIONS} "
94
147
95
148
ENV PATH="/usr/lib/jvm/java-21-openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
96
149
0 commit comments