-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile.ubuntu22
87 lines (80 loc) · 4.7 KB
/
Dockerfile.ubuntu22
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
FROM ubuntu:22.04 as base
RUN apt-get update
FROM base as tools
RUN apt-get -y update
RUN apt-get install -y gcc
WORKDIR /tools
COPY /tools/fc_log_timestamp.c /tools/virt2phys.c ./
RUN gcc -o fc_log_timestamp fc_log_timestamp.c
RUN gcc -o virt2phys virt2phys.c
# Need a new version of 'kill' which can pass integer value with the signal using sigqueue
# See: https://gitlab.com/procps-ng/procps/-/merge_requests/32
# ..and we should actually better compile this from source..
COPY /tools/kill ./
FROM base as deps
RUN apt-get update
RUN apt-get install -y maven binutils git wget --no-install-recommends
RUN mvn -version
WORKDIR /deps
COPY /deps/jdk jdk-base
RUN ./jdk-base/bin/jlink --add-modules ALL-MODULE-PATH --output jdk --strip-debug --no-man-pages --no-header-files --compress=2
#RUN git clone https://github.com/spring-projects/spring-petclinic.git
#RUN git clone --branch volkers-experiments --single-branch https://github.com/simonis/spring-petclinic.git
RUN git clone --branch volkers-experiments --single-branch https://github.com/simonis/spring-petclinic-rest.git
WORKDIR spring-petclinic-rest
RUN JAVA_HOME=/deps/jdk-base mvn -T0.8C clean package
# Only touch the lines below in order to keep the layer with
# all the downloaded Maven dependencies cached
RUN rm -rf * .git* .mvn .editorconfig
RUN git clone --branch volkers-experiments --single-branch https://github.com/simonis/spring-petclinic-rest.git .
RUN JAVA_HOME=/deps/jdk-base mvn -T0.8C clean package
WORKDIR /deps
RUN wget --debug https://github.com/CRaC/criu/releases/download/release-1.4/criu-crac-release-1.4.tar.gz
RUN tar -xzf criu-crac*.tar.gz
FROM base as cds
COPY --from=deps /deps/jdk /opt/jdk
# Create CDS archive (this was dropped by jlink)
RUN /opt/jdk/bin/java -Xshare:dump
COPY --from=deps /deps/spring-petclinic-rest/target/spring-petclinic-*.jar /opt/jars/
COPY --from=deps /deps/spring-petclinic-rest/target/dependency /opt/jars/dependency
# Now create AppCDS archives
RUN nohup bash -c "/opt/jdk/bin/java -showversion -XX:ArchiveClassesAtExit=/opt/jdk/lib/server/app-cds-shaded.jsa -cp /opt/jars/spring-petclinic-*-shaded.jar org.springframework.samples.petclinic.PetClinicApplication &" && sleep 12 && pkill -f spring && sleep 5
RUN nohup bash -c "/opt/jdk/bin/java -showversion -XX:ArchiveClassesAtExit=/opt/jdk/lib/server/app-cds-exec.jsa -jar /opt/jars/spring-petclinic-*-exec.jar &" && sleep 12 && pkill -f spring && sleep 5
# Notice that we can't use full wildcard globbing (like "spring-petclinic*-?.?.?.jar") on the classpath
RUN nohup bash -c "/opt/jdk/bin/java -showversion -XX:ArchiveClassesAtExit=/opt/jdk/lib/server/app-cds.jsa -cp /opt/jars/dependency/*:`ls /opt/jars/spring-petclinic*-?.?.?.jar` org.springframework.samples.petclinic.PetClinicApplication &" && sleep 12 && pkill -f spring && sleep 5
FROM base
RUN apt-get install -y iproute2 openssh-server socat vim-tiny --no-install-recommends
RUN adduser --disabled-password --gecos "CRaC testing" crac
RUN usermod -p `perl -e 'print crypt("crac1234", "salt"),"\n"'` crac
RUN usermod -p `perl -e 'print crypt("root1234", "salt"),"\n"'` root
RUN mkdir -p /root/.ssh
COPY /docker/firecracker_id_rsa.pub /root/.ssh/authorized_keys
RUN chmod -R go= /root/.ssh
RUN cp -r /root/.ssh /home/crac/
RUN chown -R crac:crac /home/crac/.ssh
# Required to start sshd
RUN mkdir -p /run/sshd
COPY --from=deps --chown=crac:crac /deps/jdk /opt/jdk
COPY --from=cds --chown=crac:crac /opt/jdk/lib/server/classes.jsa /opt/jdk/lib/server/
COPY --from=cds --chown=crac:crac /opt/jdk/lib/server/app-cds*.jsa /opt/jars/
COPY --from=deps /deps/criu-crac*/sbin/criu /opt/jdk/lib/criu
RUN chown root:root /opt/jdk/lib/criu
RUN chmod u+s /opt/jdk/lib/criu
COPY --from=deps --chown=crac:crac /deps/spring-petclinic-rest/target/spring-petclinic-*.jar /opt/jars/
COPY --from=deps --chown=crac:crac /deps/spring-petclinic-rest/target/dependency /opt/jars/dependency
COPY --chown=crac:crac /deps/SuspendResumeAgent.jar /opt/jars/
COPY --chown=crac:crac /tools/crac_init.sh /opt/tools/
COPY --chown=crac:crac /tools/ro_init.sh /opt/tools/
COPY --chown=crac:crac /tools/get_maps.sh /opt/tools/
COPY --chown=crac:crac /tools/mem_mapping.sh /opt/tools/
COPY --from=tools --chown=crac:crac /tools/virt2phys /opt/tools/
COPY --from=tools --chown=crac:crac /tools/fc_log_timestamp /opt/tools/
COPY --from=tools --chown=crac:crac /tools/kill /opt/tools/
COPY --chown=crac:crac /deps/jattach /opt/tools/
COPY /tools/.bashrc /root/.bashrc.tmp
RUN cat /root/.bashrc.tmp >> /root/.bashrc
RUN rm /root/.bashrc.tmp
COPY /tools/crac-resource-policies.yaml /opt/tools/crac-resource-policies.yaml
# The following two directories are required in order to mount this root file system
# read-only and overlay it with a writeable overlay file system (see ro_init.sh)
RUN mkdir /rom /overlay