aboutsummaryrefslogtreecommitdiffstats
path: root/docker/Dockerfile
diff options
context:
space:
mode:
Diffstat (limited to 'docker/Dockerfile')
-rw-r--r--docker/Dockerfile72
1 files changed, 72 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 00000000..a94e3fe8
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,72 @@
1# SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
2#
3# SPDX-License-Identifier: EPL-2.0
4
5FROM public.ecr.aws/amazoncorretto/amazoncorretto:17-al2023-jdk AS jdk
6
7FROM --platform=$BUILDPLATFORM docker.io/eclipse-temurin:17-jammy AS jlink-base
8# Use the Ubuntu Jammy based Temurin image for JLink, because it already
9# contains the require objcopy tool for stripping debug symbols:
10# https://github.com/docker-library/openjdk/issues/351
11# We'll have to cross-jlink the JDK: https://stackoverflow.com/a/47611708
12COPY --link --from=jdk /usr/lib/jvm/java-17-amazon-corretto /crossjdk
13
14FROM --platform=$BUILDPLATFORM jlink-base AS jlink-amd64-on-amd64
15
16FROM --platform=$BUILDPLATFORM jlink-base AS jlink-arm64-on-arm64
17
18FROM --platform=$BUILDPLATFORM jlink-base AS jlink-arm64-on-amd64
19# When cross-building the Docker image, we have the wrong toolchain for the
20# target architecture. We forcibly override the target for the objcopy tool.
21# The cross toolchain is not available in Amazon Linux 2023.
22RUN --mount=type=cache,target=/var/cache/apt \
23 apt-get update && \
24 apt-get install binutils-aarch64-linux-gnu && \
25 ln -sf /usr/bin/aarch64-linux-gnu-objcopy /usr/bin/objcopy
26
27FROM --platform=$BUILDPLATFORM jlink-base AS jlink-amd64-on-arm64
28RUN --mount=type=cache,target=/var/cache/apt \
29 apt-get update && \
30 apt-get install binutils-x86-64-linux-gnu && \
31 ln -sf /usr/bin/x86_64-linux-gnu-objcopy /usr/bin/objcopy
32
33FROM --platform=$BUILDPLATFORM jlink-$TARGETARCH-on-$BUILDARCH as jlink
34RUN jlink --no-header-files --no-man-pages --compress=2 \
35 --module-path=/crossjdk/jmods --strip-debug --add-modules \
36 java.base,java.logging,java.xml,jdk.zipfs \
37 --output /jlink
38
39FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal AS base
40# The launcher script generated by Gradle uses xargs to parse the argument list.
41RUN --mount=type=cache,id=yum-$TARGETARCH,target=/var/cache/apt \
42 dnf install -y findutils && \
43 dnf clean all
44# The first layer contains the slimmed down JRE.
45COPY --link --from=jlink /jlink /usr/lib/java
46ENV JAVA_HOME="/usr/lib/java" PATH="/usr/lib/java/bin:${PATH}"
47# Layer with platform-independent dependencies, slow changing.
48ADD --link lib /app/lib
49
50FROM base AS refinery-amd64
51# Layer with platform-dependent dependencies, slow changing.
52ADD --link lib_amd64 /app/lib
53# Layer with platform-dependent startup script containing references to all
54# dependency version.
55ADD --link app_amd64_bin /app/bin
56
57FROM base AS refinery-arm64
58# Layer with platform-dependent dependencies, slow changing.
59ADD --link lib_arm64 /app/lib
60# Layer with platform-dependent startup script containing references to all
61# dependency version.
62ADD --link app_arm64_bin /app/bin
63
64FROM refinery-$TARGETARCH
65# Layer with platform-independent application jars.
66ADD --link app_lib /app/lib
67# Common settings added on top.
68ENV REFINERY_LISTEN_HOST=0.0.0.0 REFINERY_LISTEN_PORT=8888
69EXPOSE 8888
70USER 1000
71WORKDIR /app
72ENTRYPOINT /app/bin/refinery-language-web