From 1207d4840e253aa6de00b3aad68cd3622e822f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonin=20D=C3=A9cimo?= Date: Tue, 25 Feb 2025 18:14:19 +0100 Subject: [PATCH] Update Dockerfiles and some lower-bounds --- Dockerfile | 40 +++++++++++++++++++++++++++---------- Dockerfile.worker | 43 ++++++++++++++++++++++++++++++---------- Dockerfile.worker.alpine | 37 ++++++++++++++++++++++++---------- current_ocluster.opam | 6 +++--- dune-project | 20 +++++++++---------- ocluster-api.opam | 6 +++--- ocluster-worker.opam | 6 +++--- ocluster.opam | 8 ++++---- 8 files changed, 113 insertions(+), 53 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8919764d..52aa1507 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,24 @@ -FROM ocaml/opam:debian-12-ocaml-4.14@sha256:650f6b9780c41f4ab594930957aa25012c60114d97638686678eb6979aa7df87 AS build -RUN sudo apt-get update && sudo apt-get install libev-dev capnproto libcapnp-dev m4 pkg-config libsqlite3-dev libgmp-dev -y --no-install-recommends -RUN sudo ln -f /usr/bin/opam-2.1 /usr/bin/opam && opam init --reinit -ni -RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 76d09264e920a27527de605cc64ef1d28ec353cd && opam update -COPY --chown=opam ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ -COPY --chown=opam obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ +# syntax=docker/dockerfile:1 +FROM ocaml/opam:debian-12-ocaml-4.14@sha256:d8ea2bf1648deabf8c3f31b9f2b8bbe279e4b02a9b2905f0abe6d5bc07144d85 AS build +RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni +RUN sudo rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' | sudo tee /etc/apt/apt.conf.d/keep-cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + sudo apt update && sudo apt-get --no-install-recommends install -y \ + capnproto \ + libcapnp-dev \ + libev-dev \ + libgmp-dev \ + libsqlite3-dev \ + m4 \ + pkg-config +RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 94514fa0d0e38616b994c0cd54c1623fd40eb357 && opam update +COPY --chown=opam --link ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ +COPY --chown=opam --link obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ RUN opam pin -yn /src/obuilder/ WORKDIR /src -RUN opam install -y --deps-only . +RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \ + opam install -y --deps-only . ADD --chown=opam . . RUN opam exec -- dune subst RUN opam exec -- dune build \ @@ -14,11 +26,19 @@ RUN opam exec -- dune build \ ./_build/install/default/bin/ocluster-admin FROM debian:12 -RUN apt-get update && apt-get install libev4 libsqlite3-0 -y --no-install-recommends -RUN apt-get install ca-certificates -y # https://github.com/mirage/ocaml-conduit/issues/388 +RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt update && apt-get --no-install-recommends install -y \ + libev4 \ + libsqlite3-0 +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt update && apt-get --no-install-recommends install -y \ + ca-certificates # https://github.com/mirage/ocaml-conduit/issues/388 WORKDIR /var/lib/ocluster-scheduler ENTRYPOINT ["/usr/local/bin/ocluster-scheduler"] -COPY --from=build \ +COPY --from=build --link \ /src/_build/install/default/bin/ocluster-scheduler \ /src/_build/install/default/bin/ocluster-admin \ /usr/local/bin/ diff --git a/Dockerfile.worker b/Dockerfile.worker index d9096b07..184b49b2 100644 --- a/Dockerfile.worker +++ b/Dockerfile.worker @@ -1,19 +1,42 @@ -FROM ocaml/opam:ubuntu-22.04-ocaml-4.14@sha256:41ce765f59ecde9d8525ec58e0da7cd1317f3798d2c4951186aeef2ce804fad5 AS build -RUN sudo apt-get update && sudo apt-get install libev-dev capnproto libcapnp-dev m4 pkg-config libsqlite3-dev libgmp-dev -y --no-install-recommends -RUN sudo ln -f /usr/bin/opam-2.1 /usr/bin/opam && opam init --reinit -ni -RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 47a1176c71e6b07f26b724409a88340f8bac3a42 && opam update -COPY --chown=opam ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ -COPY --chown=opam obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ +# syntax=docker/dockerfile:1 +FROM ocaml/opam:ubuntu-24.04-ocaml-4.14@sha256:2d1cbef1dc7c5573385f4ee837af6875deae9d7af5aea10565a130fa1ec7ec65 AS build +RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni +RUN sudo rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' | sudo tee /etc/apt/apt.conf.d/keep-cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + sudo apt update && sudo apt-get --no-install-recommends install -y \ + capnproto \ + libcapnp-dev \ + libev-dev \ + libgmp-dev \ + libsqlite3-dev \ + m4 \ + pkg-config +RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 94514fa0d0e38616b994c0cd54c1623fd40eb357 && opam update +COPY --chown=opam --link ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ +COPY --chown=opam --link obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ RUN opam pin -yn /src/obuilder/ WORKDIR /src -RUN opam install -y --deps-only . +RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \ + opam install -y --deps-only . ADD --chown=opam . . RUN opam exec -- dune subst RUN opam exec -- dune build ./_build/install/default/bin/ocluster-worker -FROM ubuntu:jammy-20221130 -RUN apt-get update && apt-get install docker.io libev4 curl gnupg2 git libsqlite3-dev ca-certificates netbase -y --no-install-recommends +FROM ubuntu:24.04 +RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt update && apt-get --no-install-recommends install -y \ + ca-certificates \ + curl \ + docker.io \ + git \ + gnupg2 \ + libev4 \ + libsqlite3-dev \ + netbase WORKDIR /var/lib/ocluster-worker ENTRYPOINT ["/usr/local/bin/ocluster-worker"] ENV PROGRESS_NO_TRUNC=1 -COPY --from=build /src/_build/install/default/bin/ocluster-worker /usr/local/bin/ +COPY --from=build --link /src/_build/install/default/bin/ocluster-worker /usr/local/bin/ diff --git a/Dockerfile.worker.alpine b/Dockerfile.worker.alpine index 6b5ff302..33fc9f65 100644 --- a/Dockerfile.worker.alpine +++ b/Dockerfile.worker.alpine @@ -1,19 +1,36 @@ -FROM ocaml/opam:alpine-3.17-ocaml-4.14@sha256:df87c00eb4b212b8b42e3cbf37b7729507bb398b4bf19c9df0e2d84d1c41e46d AS build -RUN sudo apk update && sudo apk add libev capnproto m4 sqlite libgmpxx -RUN sudo ln -f /usr/bin/opam-2.1 /usr/bin/opam && opam init --reinit -ni -RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 47a1176c71e6b07f26b724409a88340f8bac3a42 && opam update -COPY --chown=opam ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ -COPY --chown=opam obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ +# syntax=docker/dockerfile:1 +FROM ocaml/opam:alpine-3.21-ocaml-4.14@sha356:fa88fe4bd0452aa7ef1b57e66f4bf750518f4bcbb04dd97e2551f56b97c53ce3 AS build +RUN sudo ln -sf /usr/bin/opam-2.3 /usr/bin/opam && opam init --reinit -ni +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 \ + libev \ + capnproto \ + m4 \ + sqlite \ + libgmpxx +RUN cd ~/opam-repository && git fetch -q origin master && git reset --hard 94514fa0d0e38616b994c0cd54c1623fd40eb357 && opam update +COPY --chown=opam --link ocluster-api.opam ocluster-worker.opam ocluster.opam /src/ +COPY --chown=opam --link obuilder/obuilder.opam obuilder/obuilder-spec.opam /src/obuilder/ RUN opam pin -yn /src/obuilder/ WORKDIR /src -RUN opam install -y --deps-only . +RUN --mount=type=cache,target=/home/opam/.opam/download-cache,sharing=locked,uid=1000,gid=1000 \ + opam install -y --deps-only . ADD --chown=opam . . RUN opam exec -- dune subst RUN opam exec -- dune build ./_build/install/default/bin/ocluster-worker -FROM alpine:3.17 -RUN apk update && apk add docker libev curl gnupg git sqlite +FROM alpine:3.21 +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked \ + ln -s /var/cache/apk /etc/apk/cache && \ + apk -U upgrade && apk add \ + docker \ + libev \ + curl \ + gnupg \ + git \ + sqlite WORKDIR /var/lib/ocluster-worker ENTRYPOINT ["/usr/local/bin/ocluster-worker"] ENV PROGRESS_NO_TRUNC=1 -COPY --from=build /src/_build/install/default/bin/ocluster-worker /usr/local/bin/ +COPY --from=build --link /src/_build/install/default/bin/ocluster-worker /usr/local/bin/ diff --git a/current_ocluster.opam b/current_ocluster.opam index 74bc269f..279fdc37 100644 --- a/current_ocluster.opam +++ b/current_ocluster.opam @@ -19,16 +19,16 @@ homepage: "https://github.com/ocurrent/ocluster" doc: "https://ocurrent.github.io/ocluster/" bug-reports: "https://github.com/ocurrent/ocluster/issues" depends: [ - "dune" {>= "3.7"} + "dune" {>= "3.17"} "ocluster-api" {= version} - "ocaml" {>= "4.14.1"} + "ocaml" {>= "4.14"} "capnp-rpc-unix" {>= "1.2.3"} "current" {>= "0.6.4"} "current_git" {>= "0.6.4"} "duration" "fmt" "logs" - "lwt" {>= "5.6.1"} + "lwt" {>= "5.9.0"} "ppx_deriving" "ppx_deriving_yojson" "prometheus" {>= "1.2"} diff --git a/dune-project b/dune-project index 1f72ba1c..9948d066 100644 --- a/dune-project +++ b/dune-project @@ -1,4 +1,4 @@ -(lang dune 3.7) +(lang dune 3.17) (name ocluster) (formatting disabled) (generate_opam_files true) @@ -22,10 +22,10 @@ (synopsis "Cap'n Proto API for OCluster") (description "OCaml bindings for the OCluster Cap'n Proto API.") (depends - (ocaml (>= 4.14.1)) + (ocaml (>= 4.14)) (capnp-rpc-lwt (>= 1.2.3)) fmt - (lwt (>= 5.6.1)) + (lwt (>= 5.9.0)) ppx_deriving ppx_deriving_yojson)) @@ -35,14 +35,14 @@ (description "OCluster library for defining workers") (depends (ocluster-api (= :version)) - (ocaml (>= 4.14.1)) + (ocaml (>= 4.14)) (capnp-rpc-lwt (>= 1.2.3)) (cohttp-lwt-unix (>= 4.0)) (digestif (>= 0.8)) (extunix (>= 0.4.1)) fpath logs - (lwt (>= 5.6.1)) + (lwt (>= 5.9.0)) (obuilder (>= 0.5.1)) (prometheus-app (>= 1.2)))) @@ -53,18 +53,18 @@ (depends (ocluster-api (= :version)) (ocluster-worker (= :version)) - (ocaml (>= 4.14.1)) + (ocaml (>= 4.14)) (capnp-rpc-lwt (>= 1.2.3)) (capnp-rpc-net (>= 1.2.3)) (capnp-rpc-unix (>= 1.2.3)) - (cmdliner (>= 1.2.0)) + (cmdliner (>= 1.3.0)) (conf-libev (<> :os "win32")) (digestif (>= 0.8)) dune-build-info fmt fpath logs - (lwt (>= 5.6.1)) + (lwt (>= 5.9.0)) lwt-dllist (mirage-crypto (>= 0.8.5)) (obuilder (>= 0.5.1)) @@ -88,14 +88,14 @@ "Creates a stage in an OCurrent pipeline for submitting jobs to OCluster.") (depends (ocluster-api (= :version)) - (ocaml (>= 4.14.1)) + (ocaml (>= 4.14)) (capnp-rpc-unix (>= 1.2.3)) (current (>= 0.6.4)) (current_git (>= 0.6.4)) duration fmt logs - (lwt (>= 5.6.1)) + (lwt (>= 5.9.0)) ppx_deriving ppx_deriving_yojson (prometheus (>= 1.2)) diff --git a/ocluster-api.opam b/ocluster-api.opam index 2b166546..f68794cb 100644 --- a/ocluster-api.opam +++ b/ocluster-api.opam @@ -18,11 +18,11 @@ homepage: "https://github.com/ocurrent/ocluster" doc: "https://ocurrent.github.io/ocluster/" bug-reports: "https://github.com/ocurrent/ocluster/issues" depends: [ - "dune" {>= "3.7"} - "ocaml" {>= "4.14.1"} + "dune" {>= "3.17"} + "ocaml" {>= "4.14"} "capnp-rpc-lwt" {>= "1.2.3"} "fmt" - "lwt" {>= "5.6.1"} + "lwt" {>= "5.9.0"} "ppx_deriving" "ppx_deriving_yojson" "odoc" {with-doc} diff --git a/ocluster-worker.opam b/ocluster-worker.opam index aa1fb9e2..1c443f47 100644 --- a/ocluster-worker.opam +++ b/ocluster-worker.opam @@ -18,16 +18,16 @@ homepage: "https://github.com/ocurrent/ocluster" doc: "https://ocurrent.github.io/ocluster/" bug-reports: "https://github.com/ocurrent/ocluster/issues" depends: [ - "dune" {>= "3.7"} + "dune" {>= "3.17"} "ocluster-api" {= version} - "ocaml" {>= "4.14.1"} + "ocaml" {>= "4.14"} "capnp-rpc-lwt" {>= "1.2.3"} "cohttp-lwt-unix" {>= "4.0"} "digestif" {>= "0.8"} "extunix" {>= "0.4.1"} "fpath" "logs" - "lwt" {>= "5.6.1"} + "lwt" {>= "5.9.0"} "obuilder" {>= "0.5.1"} "prometheus-app" {>= "1.2"} "odoc" {with-doc} diff --git a/ocluster.opam b/ocluster.opam index 3b62a54a..dcdf0774 100644 --- a/ocluster.opam +++ b/ocluster.opam @@ -27,21 +27,21 @@ homepage: "https://github.com/ocurrent/ocluster" doc: "https://ocurrent.github.io/ocluster/" bug-reports: "https://github.com/ocurrent/ocluster/issues" depends: [ - "dune" {>= "3.7"} + "dune" {>= "3.17"} "ocluster-api" {= version} "ocluster-worker" {= version} - "ocaml" {>= "4.14.1"} + "ocaml" {>= "4.14"} "capnp-rpc-lwt" {>= "1.2.3"} "capnp-rpc-net" {>= "1.2.3"} "capnp-rpc-unix" {>= "1.2.3"} - "cmdliner" {>= "1.2.0"} + "cmdliner" {>= "1.3.0"} "conf-libev" {os != "win32"} "digestif" {>= "0.8"} "dune-build-info" "fmt" "fpath" "logs" - "lwt" {>= "5.6.1"} + "lwt" {>= "5.9.0"} "lwt-dllist" "mirage-crypto" {>= "0.8.5"} "obuilder" {>= "0.5.1"}