-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDockerfile
More file actions
122 lines (95 loc) · 4.71 KB
/
Dockerfile
File metadata and controls
122 lines (95 loc) · 4.71 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
ARG ARTIFACT_MODE=fast
FROM securesystemslab/lind-wasm-dev:latest AS src
COPY --chown=lind:lind . /home/lind/lind-wasm/lind-wasm-apps
WORKDIR /home/lind/lind-wasm/lind-wasm-apps
# Stage 1: shared setup that multiple app builds depend on.
FROM src AS shared
RUN make -j"$(nproc)" -Otarget preflight merge-base-sysroot libtirpc
# Stage 2: build apps in sibling stages so BuildKit can schedule them in parallel.
# Cap per-stage JOBS so concurrent stages do not all try to consume the full machine.
FROM shared AS bash-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" bash
FROM shared AS coreutils-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" coreutils
FROM shared AS cpython-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" cpython
FROM shared AS lmbench-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" lmbench
FROM shared AS sed-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" sed
FROM shared AS nginx-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" nginx
FROM shared AS grep-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" grep
FROM shared AS curl-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" curl
FROM shared AS git-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" git
FROM shared AS postgres-build
ARG ARTIFACT_MODE
RUN jobs="$(nproc)"; app_jobs="$(( jobs ))"; if [ "$app_jobs" -lt 1 ]; then app_jobs=1; fi; \
make -Otarget JOBS="$app_jobs" ARTIFACT_MODE="$ARTIFACT_MODE" postgres
# Stage 3: final image
FROM securesystemslab/lind-wasm-dev:latest
WORKDIR /home/lind/lind-wasm/lind-wasm-apps
# 1) Copy the full workspace ONCE (baseline)
COPY --from=shared --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps \
/home/lind/lind-wasm/lind-wasm-apps
# 2) Overlay only the build outputs from each sibling stage.
COPY --from=bash-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/bash \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/bash
COPY --from=coreutils-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/coreutils \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/coreutils
COPY --from=cpython-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/cpython \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/cpython
COPY --from=lmbench-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/lmbench \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/lmbench
COPY --from=sed-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/sed \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/sed
COPY --from=nginx-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/nginx \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/nginx
COPY --from=grep-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/grep \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/grep
COPY --from=curl-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/curl \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/curl
COPY --from=git-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/git \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/git
COPY --from=postgres-build --chown=lind:lind \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/postgres \
/home/lind/lind-wasm/lind-wasm-apps/build/bin/postgres
# 3) Ensure lindfs exists in the final image.
WORKDIR /home/lind/lind-wasm
RUN make -Otarget lindfs && \
mkdir -p lindfs/dev && \
rm -f lindfs/dev/null && \
(mknod lindfs/dev/null c 1 3 || touch lindfs/dev/null) && \
chmod 666 lindfs/dev/null
WORKDIR /home/lind/lind-wasm/lind-wasm-apps