-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile_graalvm
71 lines (57 loc) · 2.29 KB
/
Dockerfile_graalvm
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
FROM --platform=linux/amd64 amazonlinux:2
RUN yum -y update
RUN yum install -y tar unzip gzip zip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
less libcurl-devel openssl openssl-devel readline-devel xz-devel \
zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
&& rm -rf /var/cache/yum
ENV GRAAL_VERSION 22.2.0
ENV GRAAL_FOLDERNAME graalvm-ce-java17-${GRAAL_VERSION}
ENV GRAAL_FILENAME graalvm-ce-java17-linux-amd64-${GRAAL_VERSION}.tar.gz
RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${GRAAL_VERSION}/${GRAAL_FILENAME} | tar -xvz
RUN mv $GRAAL_FOLDERNAME /usr/lib/graalvm
RUN rm -rf $GRAAL_FOLDERNAME
# Graal maven plugin requires Maven 3.3.x
ENV MVN_VERSION 3.6.3
ENV MVN_FOLDERNAME apache-maven-${MVN_VERSION}
ENV MVN_FILENAME apache-maven-${MVN_VERSION}-bin.tar.gz
RUN curl -4 -L https://mirrors.ukfast.co.uk/sites/ftp.apache.org/maven/maven-3/${MVN_VERSION}/binaries/${MVN_FILENAME} | tar -xvz
RUN mv $MVN_FOLDERNAME /usr/lib/maven
RUN rm -rf $MVN_FOLDERNAME
RUN /usr/lib/graalvm/bin/gu install native-image
RUN ln -s /usr/lib/graalvm/bin/native-image /usr/bin/native-image
RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn
ENV JAVA_HOME /usr/lib/graalvm
ENV PATH="${PATH}:/usr/lib/graalvm/bin"
ENV PATH="${PATH}:/usr/bin"
RUN java -version
RUN mvn -v
COPY lambda-app lambda-app
WORKDIR /lambda-app
RUN mvn clean package -P native-image
# Find JDK module dependencies dynamically from the uber jar
RUN jdeps -q \
--ignore-missing-deps \
--multi-release 17 \
--print-module-deps \
target/lambda-app.jar > jre-deps.info
# Create a slim Java 17 GraalVM JRE which only contains the required modules to run the function
RUN jlink --verbose \
--compress 2 \
--strip-java-debug-attributes \
--no-header-files \
--no-man-pages \
--output /jre-custom \
--add-modules $(cat jre-deps.info)
# Use Javas Application Class Data Sharing feature
# It creates the file /jre-custom/lib/server/classes.jsa
RUN /jre-custom/bin/java -Xshare:dump
# Package everything together into a custom runtime archive
WORKDIR /
COPY bootstrap bootstrap
RUN chmod 755 bootstrap
RUN cp /lambda-app/target/lambda-app.jar lambda-app.jar
RUN zip -r lambda-app-graalvm.zip \
lambda-app.jar
RUN zip -r graalvm-layer.zip \
bootstrap \
/jre-custom