83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Docker
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Docker
		
	
	
| # 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.48-slim-buster
 | |
| FROM rust@sha256:cb6b98346ef41a2062d4d8f099127d880f2ef7c1515d00215fc9ea713b99167b 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_relay && \
 | |
| cargo new --bin crates/ptth_server && \
 | |
| cargo new --bin crates/ptth_file_server_bin && \
 | |
| cargo new --bin tools/ptth_tail
 | |
| 
 | |
| # 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_server/Cargo.toml            ./crates/ptth_server/
 | |
| # COPY ./crates/ptth_file_server_bin/Cargo.toml   ./crates/ptth_file_server_bin/
 | |
| # COPY ./tools/ptth_tail/Cargo.toml               ./tools/ptth_tail/
 | |
| 
 | |
| # 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_relay/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
 | |
| 
 | |
| # 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_relay && \
 | |
| cargo test --release -p ptth_relay
 | |
| 
 | |
| # debian:buster-slim
 | |
| FROM debian@sha256:240f770008bdc538fecc8d3fa7a32a533eac55c14cbc56a9a8a6f7d741b47e33
 | |
| 
 | |
| RUN apt-get update \
 | |
| && apt-get upgrade -y \
 | |
| && apt-get install -y libssl1.1 ca-certificates tini
 | |
| 
 | |
| RUN addgroup --gid 10001 nonroot && adduser --system --uid 10000 --gid 10001 nonroot
 | |
| 
 | |
| USER nonroot
 | |
| WORKDIR /home/nonroot
 | |
| 
 | |
| COPY --from=build /ptth/target/release/ptth_relay ./
 | |
| COPY --from=build /ptth/handlebars                ./handlebars
 | |
| 
 | |
| ARG git_version
 | |
| RUN echo -n "$git_version" > ./git_version.txt
 | |
| 
 | |
| ENTRYPOINT ["/usr/bin/tini", "--", "./ptth_relay"]
 |