Skip to content

Commit c3e4a9c

Browse files
committed
Dockerfile: use BuildKit syntax and features
- use mount caches to avoid redownloading apk packages; - use COPY --link for more efficient copy and lighter images; - use Buildkit built-in support for Git clones.
1 parent 5d01a4b commit c3e4a9c

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

Dockerfile

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
# syntax=docker/dockerfile:1
12
FROM ocaml/opam:alpine-3.21-ocaml-5.2 AS build
23
RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni
34

45
# Install system dependencies
5-
RUN sudo apk -U upgrade --no-cache && sudo apk add --no-cache \
6+
RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \
7+
sudo ln -s /var/cache/apk /etc/apk/cache && \
8+
sudo apk -U upgrade && sudo apk add \
69
autoconf \
710
curl-dev \
811
gmp-dev \
@@ -17,8 +20,9 @@ RUN cd ~/opam-repository && git reset --hard de786e28dbea73843ad5e5f0290a4e81fba
1720
WORKDIR /home/opam
1821

1922
# Install opam dependencies
20-
COPY --chown=opam ocamlorg.opam .
21-
RUN opam install . --deps-only
23+
COPY --chown=opam --link ocamlorg.opam .
24+
RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \
25+
opam install . --deps-only
2226

2327
# Build project
2428
COPY --chown=opam . .
@@ -33,18 +37,20 @@ RUN touch package.state && ./init-cache package.state
3337

3438
FROM alpine:3.21
3539

36-
RUN apk -U upgrade --no-cache && apk add --no-cache \
40+
RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \
41+
ln -s /var/cache/apk /etc/apk/cache && \
42+
apk -U upgrade && apk add \
3743
git \
3844
gmp \
3945
libev
4046

41-
COPY --from=build /home/opam/package.state /var/package.state
42-
COPY --from=build /home/opam/opam-repository /var/opam-repository
43-
COPY --from=build /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server
47+
COPY --from=build --link /home/opam/package.state /var/package.state
48+
COPY --from=build --link /home/opam/opam-repository /var/opam-repository
49+
COPY --from=build --link /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server
4450

45-
COPY playground/asset playground/asset
51+
COPY --link playground/asset playground/asset
4652

47-
RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual
53+
ADD --keep-git-dir --link https://github.com/ocaml-web/html-compiler-manuals /manual
4854

4955
RUN git config --global --add safe.directory /var/opam-repository
5056

0 commit comments

Comments
 (0)