diff --git a/Dockerfile b/Dockerfile index 271078ba61..1e194669d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ +# syntax=docker/dockerfile:1 FROM ocaml/opam:alpine-3.21-ocaml-5.2 AS build RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni # Install system dependencies -RUN sudo apk -U upgrade --no-cache && sudo apk add --no-cache \ +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \ + sudo ln -s /var/cache/apk /etc/apk/cache && \ + sudo apk -U upgrade && sudo apk add \ autoconf \ curl-dev \ gmp-dev \ @@ -17,8 +20,9 @@ RUN cd ~/opam-repository && git reset --hard 2c9566f0b0de5ab6dad7ce8d22b68a2999a WORKDIR /home/opam # Install opam dependencies -COPY --chown=opam ocamlorg.opam . -RUN opam install . --deps-only +COPY --chown=opam --link ocamlorg.opam . +RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \ + opam install . --deps-only # Build project COPY --chown=opam . . @@ -33,19 +37,21 @@ RUN touch package.state && ./init-cache package.state FROM alpine:3.21 -RUN apk -U upgrade --no-cache && apk add --no-cache \ +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \ + ln -s /var/cache/apk /etc/apk/cache && \ + apk -U upgrade && apk add \ git \ gmp \ libev -COPY --from=build /home/opam/package.state /var/package.state -COPY --from=build /home/opam/opam-repository /var/opam-repository -COPY --from=build /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server +COPY --from=build --link /home/opam/package.state /var/package.state +COPY --from=build --link /home/opam/opam-repository /var/opam-repository +COPY --from=build --link /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/server -COPY playground/asset playground/asset +COPY --link playground/asset playground/asset -RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual -ADD data/v2 /v2 +ADD --keep-git-dir --link https://github.com/ocaml-web/html-compiler-manuals /manual +COPY --link data/v2 /v2 RUN git config --global --add safe.directory /var/opam-repository