-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
54 lines (49 loc) · 2.2 KB
/
Dockerfile
File metadata and controls
54 lines (49 loc) · 2.2 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
ARG BUN_VERSION=1.3.12
ARG ALPINE_VERSION=3.21
# ---------------------------------------------------------------------------
# Stage 1: download the musl build of Bun for the target architecture
# ---------------------------------------------------------------------------
FROM alpine:${ALPINE_VERSION} AS download
ARG BUN_VERSION
ARG TARGETARCH
RUN apk add --no-cache curl unzip && \
ARCH=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "aarch64") && \
curl -fsSL \
"https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/bun-linux-${ARCH}-musl.zip" \
-o /tmp/bun.zip && \
unzip /tmp/bun.zip -d /tmp && \
mv /tmp/bun-linux-*/bun /usr/local/bin/bun && \
chmod +x /usr/local/bin/bun
# ---------------------------------------------------------------------------
# Stage 2 (optional): UPX-compress the binary
# ---------------------------------------------------------------------------
FROM alpine:${ALPINE_VERSION} AS compress
RUN apk add --no-cache upx
COPY --from=download /usr/local/bin/bun /usr/local/bin/bun
RUN upx --all-methods /usr/local/bin/bun
# ---------------------------------------------------------------------------
# Final: default variant — plain bun binary on Alpine + libstdc++
# ---------------------------------------------------------------------------
FROM alpine:${ALPINE_VERSION} AS default
RUN apk add --no-cache libstdc++ && \
addgroup -g 1000 bun && \
adduser -u 1000 -G bun -s /bin/sh -D bun && \
mkdir -p /app && chown bun:bun /app
COPY --from=download /usr/local/bin/bun /usr/local/bin/bun
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx
USER bun
WORKDIR /app
ENTRYPOINT ["bun"]
# ---------------------------------------------------------------------------
# Final: UPX variant — compressed bun binary on Alpine + libstdc++
# ---------------------------------------------------------------------------
FROM alpine:${ALPINE_VERSION} AS upx
RUN apk add --no-cache libstdc++ && \
addgroup -g 1000 bun && \
adduser -u 1000 -G bun -s /bin/sh -D bun && \
mkdir -p /app && chown bun:bun /app
COPY --from=compress /usr/local/bin/bun /usr/local/bin/bun
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx
USER bun
WORKDIR /app
ENTRYPOINT ["bun"]