/ nginx-keycloak / Dockerfile
Dockerfile
 1  FROM rust:alpine as deps
 2  
 3  WORKDIR /deps
 4  
 5  COPY . .
 6  
 7  RUN find . -type f ! -name Cargo.toml ! -name Cargo.lock -delete \
 8      && find . -type d -empty -delete \
 9      && find . -type d | while read d; do mkdir "$d/src" && touch "$d/src/lib.rs"; done
10  
11  
12  FROM rust:alpine AS builder
13  
14  WORKDIR /build
15  
16  RUN apk add --no-cache musl-dev clang mold
17  
18  ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
19  ENV CARGO_TARGET_DIR=/target
20  ENV RUSTFLAGS="-C linker=clang -C link-arg=-fuse-ld=/usr/bin/mold"
21  
22  COPY --from=deps /deps .
23  
24  RUN cargo build --locked --release && rm -rf /build
25  
26  COPY . .
27  
28  RUN find . -exec touch {} \; \
29      && cargo build --locked --release \
30      && mkdir dist \
31      && cp $(find /target/release/ -maxdepth 1 -executable -type f) dist/ \
32      && strip dist/*
33  
34  
35  FROM scratch
36  
37  ENV RUST_LOG=info
38  
39  COPY --from=builder /build/dist /
40  
41  ENTRYPOINT ["/nginx-keycloak"]