Yeah that is very crutial. There is yet another trick when building rust docker images, to keep the build time low, and take full advantage of the docker build cache. That is build a project from scratch, copy only over you Cargo.{lock,toml}, run a build.
That trick will cause a pull and build of all dependencies, so that docker can cache that, and next time when you have changes only on your code, it will skip those steps because at this time you've only copied over the Cargo files and no code at all. See a rough draft below:
FROM rust:latest as builderRUN apt-get update \
&& apt-get install-y--no-install-recommends\
musl-tools
RUN rustup target add x86_64-unknown-linux-musl
RUN rustup component add clippy
FROM builder as server_builderWORKDIR /graphql## doing some overhead here to keep docker build time low# create a new empty shell projectRUN USER=root cargo new --bin server
WORKDIR /graphql/server# copy over your manifestsCOPY ./server/Cargo.lock ./COPY ./server/Cargo.toml ./# this build step will cache dependenciesRUN RUSTFLAGS=-Clinker=musl-gcc cargo build --target x86_64-unknown-linux-musl --releaseRUN rm src/*.rs
## done with the overhead# skip all other waste and copy the code nowCOPY ./server/src ./srcRUN rm-f ./target/release/deps/server*RUN RUSTFLAGS=-Clinker=musl-gcc \
cargo clippy --target x86_64-unknown-linux-musl --all-features---D warnings &&\
cargo test--target x86_64-unknown-linux-musl --verbose&&\
cargo build --target x86_64-unknown-linux-musl --release--verbose# further things to be done..
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Yeah that is very crutial. There is yet another trick when building rust docker images, to keep the build time low, and take full advantage of the docker build cache. That is build a project from scratch, copy only over you Cargo.{lock,toml}, run a build.
That trick will cause a pull and build of all dependencies, so that docker can cache that, and next time when you have changes only on your code, it will skip those steps because at this time you've only copied over the Cargo files and no code at all. See a rough draft below: