# Mix of https://whitfin.io/speeding-up-rust-docker-builds/ # and a "minimal Rust Docker image!" GH repo which was just # "lol use Alpine duh" FROM rust:1.47-slim-buster as build #RUN apk add libseccomp-dev WORKDIR / ENV USER root # create empty shell projects RUN cargo new --bin ptth WORKDIR /ptth RUN \ cargo new --lib crates/always_equal && \ cargo new --lib crates/ptth_core && \ cargo new --bin crates/ptth_file_server_bin && \ cargo new --bin crates/ptth_relay && \ cargo new --bin crates/ptth_server # copy over your manifests COPY ./Cargo.lock ./Cargo.lock COPY ./Cargo.toml ./Cargo.toml COPY ./crates/always_equal/Cargo.toml ./crates/always_equal/Cargo.toml COPY ./crates/ptth_core/Cargo.toml ./crates/ptth_core/Cargo.toml COPY ./crates/ptth_relay/Cargo.toml ./crates/ptth_relay/Cargo.toml COPY ./crates/ptth_file_server_bin/Cargo.toml ./crates/ptth_file_server_bin/Cargo.toml COPY ./crates/ptth_server/Cargo.toml ./crates/ptth_server/Cargo.toml # this build step will cache your dependencies RUN cargo build --release -p ptth_relay RUN \ rm \ src/*.rs \ crates/always_equal/src/*.rs \ crates/ptth_core/src/*.rs \ crates/ptth_file_server_bin/src/*.rs \ crates/ptth_relay/src/*.rs \ crates/ptth_server/src/*.rs # copy source tree COPY ./src ./src COPY ./crates ./crates COPY ./handlebars ./handlebars # Bug in cargo's incremental build logic, triggered by # Docker doing something funny with mtimes? Maybe? RUN touch crates/ptth_core/src/lib.rs # build for release RUN cargo build --release -p ptth_relay FROM debian:buster-slim RUN apt-get update \ && apt-get install -y libssl1.1 ca-certificates \ && apt-get upgrade -y COPY --from=build /ptth/target/release/ptth_relay /root/ptth_relay COPY --from=build /ptth/crates/ptth_relay/src/git_version.rs /root/git_version.rs COPY --from=build /ptth/handlebars /root/handlebars WORKDIR /root ENTRYPOINT ["./ptth_relay"]