forked from TopQuadrant/shacl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
45 lines (33 loc) · 1.48 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
ARG ARCH_BASE
FROM $ARCH_BASE AS jre-build
WORKDIR /app
ARG VERSION
# Annotations to embed in container
LABEL org.opencontainers.image.title="TopBraid SHACL API"
LABEL org.opencontainers.image.description="SHACL API in Java based on Apache Jena "
LABEL org.opencontainers.image.source=https://github.com/TopQuadrant/shacl
LABEL org.opencontainers.image.licenses=Apache-2.0
LABEL org.opencontainers.image.version=${VERSION}
# BUILD STAGE 1: install minimal Java environment + curl & zip for SHACL API
# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base,java.compiler,java.desktop,java.management,java.naming,java.net.http,java.rmi,java.scripting,java.security.jgss,java.security.sasl,java.sql,java.xml.crypto,jdk.unsupported \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
RUN apk add maven curl zip
# Compile with maven, extract binaries and copy into image
COPY . /app
RUN mvn versions:set -DnewVersion=${VERSION} && mvn package -Dmaven.test.skip=true
RUN unzip target/shacl-${VERSION}-bin.zip -d /app/
# BUILD STAGE 2: keep only Java and SHACL
FROM alpine:3.20.3
ARG VERSION
ENV JAVA_HOME=/usr
ENV PATH="/app/shacl-${VERSION}/bin:${PATH}"
COPY --from=jre-build /javaruntime $JAVA_HOME
COPY --chmod=0755 --from=jre-build /app/shacl-${VERSION} /app/shacl-${VERSION}
COPY --chmod=0755 --from=jre-build "/app/.docker/entrypoint.sh" "/entrypoint.sh"
ENTRYPOINT ["/entrypoint.sh"]