# https://whitfin.io/speeding-up-rust-docker-builds/ # TODO: https://stackoverflow.com/questions/57389547/how-to-define-the-context-for-a-docker-build-as-a-specific-commit-on-one-of-the # rust:1.64-slim-buster FROM rust@sha256:7da4fbd2dc7176746e8e5c371aeb0bbe742598c4906fa48cb2d87a4b89d50357 as build 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_relay && \ cargo new --bin crates/ptth_server && \ cargo new --bin crates/ptth_file_server_bin && \ cargo new --bin tools/ptth_tail && \ cargo new --bin crates/debug_proxy && \ cargo new --bin crates/ptth_quic # copy over your manifests COPY ./Cargo.lock ./ COPY ./Cargo.toml ./ COPY ./crates/always_equal/Cargo.toml ./crates/always_equal/ COPY ./crates/ptth_core/Cargo.toml ./crates/ptth_core/ COPY ./crates/ptth_relay/Cargo.toml ./crates/ptth_relay/ COPY ./crates/ptth_quic/Cargo.toml ./crates/ptth_quic/ # this build step will cache your dependencies RUN cargo build --release -p ptth_quic RUN \ rm \ src/*.rs \ crates/always_equal/src/*.rs \ crates/ptth_core/src/*.rs \ crates/ptth_relay/src/*.rs \ crates/ptth_quic/src/*.rs # Copy source tree # Yes, I tried a few variations on the syntax. Dockerfiles are just rough. COPY ./src/ ./src COPY ./crates/always_equal ./crates/always_equal COPY ./crates/ptth_core ./crates/ptth_core COPY ./crates/ptth_relay ./crates/ptth_relay COPY ./handlebars/ ./handlebars COPY ./crates/ptth_quic ./crates/ptth_quic # 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 # gate only on ptth_relay tests for now RUN \ cargo build --release -p ptth_quic --bin ptth_quic_relay_server && \ cargo test --release -p ptth_quic --bin ptth_quic_relay_server # debian:buster-slim FROM debian@sha256:13f0764262a064b2dd9f8a828bbaab29bdb1a1a0ac6adc8610a0a5f37e514955 RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y libssl1.1 ca-certificates tini RUN addgroup --gid 10001 ptth_user && adduser --system --uid 10000 --gid 10001 ptth_user USER ptth_user WORKDIR /home/ptth_user COPY --from=build /ptth/target/release/ptth_quic_relay_server ./ ARG git_version RUN \ echo -n "$git_version" > ./git_version.txt && \ ln -s ptth_quic_relay_server app CMD ["/usr/bin/tini", "--", "./ptth_quic_relay_server"]