mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
## Summary This PR attempts to improve caching, and thus speeds, for Docker image generation. This is to dramatically reduce the times of building images by using: - cargo chef - cache mounts - sccache - cache dance ## Context As a result this means thats changes that Do not Affect the code, should (in theory) not trigger a new build to be run. Changes that do change the rust code should also in theory be shorter as the dependencies are unlikely to have changed and so that too can be reused. In fact some part of the process should always be able to be re-used unless we do something like drastic like change rust-toolchain, but even then should only be a one time thing to regenerate that part of the cache. --------- Co-authored-by: Facundo Farall <37149322+ffarall@users.noreply.github.com>
65 lines
No EOL
2.5 KiB
Docker
65 lines
No EOL
2.5 KiB
Docker
# --- Setup Build Environment ---
|
|
FROM docker.io/paritytech/ci-unified:bullseye-1.85.0 AS base
|
|
|
|
ARG MOLD_VERSION=2.39.0
|
|
ARG SCCACHE_VERSION=0.10.0
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
curl \
|
|
xz-utils \
|
|
clang \
|
|
&& echo "Installing mold v${MOLD_VERSION}..." \
|
|
&& curl -Lo mold.tar.gz "https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-x86_64-linux.tar.gz" \
|
|
&& tar -xf mold.tar.gz --strip-components=1 -C /usr/local \
|
|
&& rm mold.tar.gz \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& echo "Installing sccache v${SCCACHE_VERSION}..." \
|
|
&& curl -Lo sccache.tar.gz "https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz" \
|
|
&& tar -xf sccache.tar.gz --strip-components=1 -C /usr/local/bin sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache \
|
|
&& rm sccache.tar.gz
|
|
|
|
RUN cargo install cargo-chef --version 0.1.71 --locked
|
|
|
|
ENV RUSTC_WRAPPER=sccache \
|
|
SCCACHE_DIR=/usr/local/sccache \
|
|
SCCACHE_CACHE_SIZE=25G \
|
|
RUSTFLAGS="-Clinker=clang -Clink-arg=-fuse-ld=/usr/local/bin/mold"
|
|
|
|
# --- Prepare build plan with cargo-chef ---
|
|
FROM base AS planner
|
|
WORKDIR /datahaven
|
|
COPY ./operator/ .
|
|
RUN cargo chef prepare --recipe-path recipe.json
|
|
|
|
# --- Build dependencies using cargo-chef ---
|
|
FROM base AS builder
|
|
WORKDIR /datahaven
|
|
COPY --from=planner /datahaven/recipe.json recipe.json
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/usr/local/cargo/git \
|
|
--mount=type=cache,target=/usr/local/sccache,sharing=locked \
|
|
cargo chef cook --recipe-path recipe.json --release
|
|
COPY ./operator/ .
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/usr/local/cargo/git \
|
|
--mount=type=cache,target=/usr/local/sccache,sharing=locked \
|
|
cargo build --locked --release
|
|
|
|
# --- Create final lightweight runtime image ---
|
|
FROM docker.io/parity/base-bin:latest
|
|
COPY --from=builder /datahaven/target/release/datahaven-node /usr/local/bin
|
|
|
|
USER root
|
|
RUN useradd -m -u 1001 -U -s /bin/sh -d /datahaven datahaven && \
|
|
mkdir -p /data /datahaven/.local/share && \
|
|
chown -R datahaven:datahaven /data && \
|
|
ln -s /data /datahaven/.local/share/datahaven && \
|
|
rm -rf /usr/bin /usr/sbin && \
|
|
/usr/local/bin/datahaven-node --version
|
|
|
|
USER datahaven
|
|
|
|
EXPOSE 30333 9933 9944 9615
|
|
VOLUME ["/data"]
|
|
|
|
ENTRYPOINT ["/usr/local/bin/datahaven-node"] |