Skip to content

Commit 6770707

Browse files
authored
Merge pull request #5533 from duncdrum/feat-multi-arch-containers
2 parents bac6441 + 2d95bd1 commit 6770707

File tree

4 files changed

+57
-41
lines changed

4 files changed

+57
-41
lines changed

.github/workflows/ci-deploy.yml

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ jobs:
55
name: Build and Test Images
66
runs-on: ubuntu-latest
77
# NOTE (DP): Publish on develop and master, test on PRs against these
8+
# TODO(DP) Reinstate CRONed release builds to update stock apps regularly
89
if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master' || github.base_ref == 'develop' || github.base_ref == 'master'
910
steps:
1011
- uses: actions/checkout@v4
@@ -15,6 +16,10 @@ jobs:
1516
with:
1617
distribution: liberica
1718
java-version: '17'
19+
- name: Set up QEMU
20+
uses: docker/setup-qemu-action@v3
21+
with:
22+
platforms: linux/amd64,linux/arm64
1823
- name: Make buildkit default
1924
uses: docker/setup-buildx-action@v3
2025
id: buildx
@@ -27,7 +32,11 @@ jobs:
2732
key: deploy-${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
2833
restore-keys: deploy-${{ runner.os }}-maven
2934
- name: Install bats
30-
run: sudo apt-get install bats
35+
run: sudo apt-get install bats
36+
# Hack around #5450
37+
- name: pull base image
38+
run: |
39+
docker pull --platform linux/amd64 --platform linux/arm64 gcr.io/distroless/java17-debian12:latest
3140
- name: Build images
3241
run: mvn -V -B -q -Pdocker -DskipTests -Ddependency-check.skip=true -P !mac-dmg-on-unix,!installer,!concurrency-stress-tests,!micro-benchmarks,skip-build-dist-archives clean package
3342
- name: Check local images

exist-docker/pom.xml

+38-13
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2323
2424
-->
25-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
25+
<project xmlns="http://maven.apache.org/POM/4.0.0"
26+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
27+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2628
<modelVersion>4.0.0</modelVersion>
2729

2830
<parent>
@@ -42,14 +44,15 @@
4244
<connection>scm:git:https://github.com/exist-db/exist.git</connection>
4345
<developerConnection>scm:git:https://github.com/exist-db/exist.git</developerConnection>
4446
<url>scm:git:https://github.com/exist-db/exist.git</url>
45-
<tag>HEAD</tag>
46-
</scm>
47+
<tag>HEAD</tag>
48+
</scm>
4749

4850
<properties>
4951
<assemble.dir>${project.build.directory}/exist-docker-${project.version}-docker-dir</assemble.dir>
5052
<exist.uber.jar.filename>exist.uber.jar</exist.uber.jar.filename>
5153
<docker.tag>latest</docker.tag>
5254
<docker.debug.tag>debug</docker.debug.tag>
55+
<docker.platforms>linux/amd64, linux/arm64</docker.platforms>
5356
</properties>
5457

5558
<dependencies>
@@ -106,7 +109,9 @@
106109
<configuration>
107110
<failOnWarning>true</failOnWarning>
108111
<ignoredUnusedDeclaredDependencies>
109-
<ignoredUnusedDeclaredDependency>${project.groupId}:exist-distribution:pom:${project.version}</ignoredUnusedDeclaredDependency> <!-- needed at runtime to support lucene query syntax -->
112+
<ignoredUnusedDeclaredDependency>
113+
${project.groupId}:exist-distribution:pom:${project.version}</ignoredUnusedDeclaredDependency> <!--
114+
needed at runtime to support lucene query syntax -->
110115
</ignoredUnusedDeclaredDependencies>
111116
</configuration>
112117
</execution>
@@ -124,7 +129,8 @@
124129
<goal>single</goal>
125130
</goals>
126131
<configuration>
127-
<archiveBaseDirectory>${project.basedir}/../exist-distribution/target/exist-distribution-${project.version}-dir</archiveBaseDirectory>
132+
<archiveBaseDirectory>
133+
${project.basedir}/../exist-distribution/target/exist-distribution-${project.version}-dir</archiveBaseDirectory>
128134
<attach>false</attach>
129135
<descriptors>
130136
<descriptor>src/assembly/dist-assembly-docker.xml</descriptor>
@@ -183,18 +189,24 @@
183189
</filter>
184190
</filters>
185191
<transformers>
186-
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
187-
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
192+
<transformer
193+
implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
194+
<transformer
195+
implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
188196
<addHeader>false</addHeader>
189197
</transformer>
190-
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
198+
<transformer
199+
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
191200
<resource>META-INF/mailcap</resource>
192201
</transformer>
193-
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
202+
<transformer
203+
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
194204
<resource>META-INF/mailcap.default</resource>
195205
</transformer>
196-
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
197-
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
206+
<transformer
207+
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
208+
<transformer
209+
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
198210
<manifestEntries>
199211
<Multi-Release>true</Multi-Release>
200212
</manifestEntries>
@@ -210,12 +222,19 @@
210222
<artifactId>docker-maven-plugin</artifactId>
211223
<version>0.45.1</version>
212224
<configuration>
213-
<verbose>true</verbose>
225+
<verbose>true</verbose>
226+
<pushRegistry>registry.hub.docker.com</pushRegistry>
214227
<images>
215228
<image>
216229
<name>existdb/existdb:%v</name>
230+
<registry>registry.hub.docker.com</registry>
217231
<alias>exist</alias>
218232
<build>
233+
<buildx>
234+
<platforms>
235+
<platform>${docker.platforms}</platform>
236+
</platforms>
237+
</buildx>
219238
<tags>
220239
<tag>${docker.tag}</tag>
221240
</tags>
@@ -225,8 +244,14 @@
225244
</image>
226245
<image>
227246
<name>existdb/existdb:%v-DEBUG</name>
247+
<registry>registry.hub.docker.com</registry>
228248
<alias>exist-debug</alias>
229249
<build>
250+
<buildx>
251+
<platforms>
252+
<platform>${docker.platforms}</platform>
253+
</platforms>
254+
</buildx>
230255
<tags>
231256
<tag>${docker.debug.tag}</tag>
232257
</tags>
@@ -256,4 +281,4 @@
256281

257282
</plugins>
258283
</build>
259-
</project>
284+
</project>

exist-docker/src/main/resources-filtered/Dockerfile

+4-22
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,7 @@
2020
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2121
#
2222

23-
# Use Debian Bullseye (which is the base of gcr.io/distroless/java:17) for additional library dependencies that we need
24-
# FROM debian:bullseye-slim as debian-slim
25-
# RUN apt-get update && apt-get -y dist-upgrade
26-
# RUN apt-get install -y openjdk-17-jre-headless
27-
# RUN apt-get install -y expat fontconfig # Install tools required by FOP
28-
29-
FROM gcr.io/distroless/java17:latest
30-
31-
# Copy over dependencies for Apache FOP, missing from GCR's JRE
32-
# COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/lib/x86_64-linux-gnu/libfreetype.so.6
33-
# COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/liblcms2.so.2 /usr/lib/x86_64-linux-gnu/liblcms2.so.2
34-
# COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng16.so.16
35-
# COPY --from=debian-slim /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
36-
37-
# Copy dependencies for Apache Batik (used by Apache FOP to handle SVG rendering)
38-
# COPY --from=debian-slim /etc/fonts /etc/fonts
39-
# COPY --from=debian-slim /lib/x86_64-linux-gnu/libexpat.so.1 /lib/x86_64-linux-gnu/libexpat.so.1
40-
# COPY --from=debian-slim /usr/share/fontconfig /usr/share/fontconfig
41-
# COPY --from=debian-slim /usr/share/fonts/truetype/dejavu /usr/share/fonts/truetype/dejavu
23+
FROM gcr.io/distroless/java17-debian12:latest
4224

4325
# Copy eXist-db
4426
COPY LICENSE /exist/LICENSE
@@ -66,10 +48,10 @@ ARG CACHE_MEM
6648
ARG MAX_BROKER
6749
ARG JVM_MAX_RAM_PERCENTAGE
6850

69-
ENV EXIST_HOME "/exist"
51+
ENV EXIST_HOME=/exist
7052
ENV CLASSPATH=/exist/lib/${exist.uber.jar.filename}
7153

72-
ENV JAVA_TOOL_OPTIONS \
54+
ENV JAVA_TOOL_OPTIONS="\
7355
-Dfile.encoding=UTF8 \
7456
-Dsun.jnu.encoding=UTF-8 \
7557
-Djava.awt.headless=true \
@@ -85,7 +67,7 @@ ENV JAVA_TOOL_OPTIONS \
8567
-XX:+UseStringDeduplication \
8668
-XX:+UseContainerSupport \
8769
-XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} \
88-
-XX:+ExitOnOutOfMemoryError
70+
-XX:+ExitOnOutOfMemoryError"
8971

9072
HEALTHCHECK CMD [ "java", \
9173
"org.exist.start.Main", "client", \

exist-docker/src/main/resources-filtered/Dockerfile-DEBUG

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2121
#
2222

23-
# Use JDK 17 in Debian Bullseye (as our production image gcr.io/distroless/java:17 is based on Debian Bullseye with just a JRE)
24-
FROM debian:bullseye-slim
23+
# Use JDK 17 in Debian as our production image gcr.io/distroless/java is based on Debian with just a JRE)
24+
FROM debian:bookworm-slim
2525
RUN apt-get update && apt-get -y dist-upgrade
2626
RUN apt-get install -y openjdk-17-jdk-headless
2727
RUN apt-get install -y expat fontconfig # Install tools required by FOP
@@ -52,10 +52,10 @@ ARG MAX_BROKER
5252
ARG JVM_MAX_RAM_PERCENTAGE
5353
ARG JVM_JDWP_SUSPEND
5454

55-
ENV EXIST_HOME "/exist"
55+
ENV EXIST_HOME=/exist
5656
ENV CLASSPATH=/exist/lib/${exist.uber.jar.filename}
5757

58-
ENV JAVA_TOOL_OPTIONS \
58+
ENV JAVA_TOOL_OPTIONS="\
5959
-Dfile.encoding=UTF8 \
6060
-Dsun.jnu.encoding=UTF-8 \
6161
-Djava.awt.headless=true \
@@ -72,7 +72,7 @@ ENV JAVA_TOOL_OPTIONS \
7272
-XX:+UseContainerSupport \
7373
-XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} \
7474
-XX:+ExitOnOutOfMemoryError \
75-
-agentlib:jdwp=transport=dt_socket,server=y,suspend=${JVM_JDWP_SUSPEND:-n},address=5005
75+
-agentlib:jdwp=transport=dt_socket,server=y,suspend=${JVM_JDWP_SUSPEND:-n},address=5005"
7676

7777
HEALTHCHECK CMD [ "java", \
7878
"org.exist.start.Main", "client", \

0 commit comments

Comments
 (0)