Dockerfile templates for rust projects
This commit is contained in:
		
							
								
								
									
										56
									
								
								docker/alpine.Dockerfile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								docker/alpine.Dockerfile
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| #################################################################################################### | ||||
| ## Builder | ||||
| #################################################################################################### | ||||
| FROM rust:1-alpine3.19 | ||||
| # This is important, see https://github.com/rust-lang/docker-rust/issues/85 | ||||
| ENV RUSTFLAGS="-C target-feature=-crt-static" | ||||
|  | ||||
| RUN apk add --no-cache musl-dev | ||||
|  | ||||
| WORKDIR /app | ||||
|  | ||||
| COPY ./ /app | ||||
|  | ||||
| RUN cargo build --release | ||||
| RUN strip target/release/small-rust | ||||
|  | ||||
| #################################################################################################### | ||||
| ## Final image | ||||
| #################################################################################################### | ||||
| FROM alpine:3.19 | ||||
|  | ||||
| RUN apk add --no-cache libgcc | ||||
|  | ||||
| COPY --from=0 /app/target/release/small-rust . | ||||
|  | ||||
| ENTRYPOINT ["/small-rust"] | ||||
|  | ||||
|  | ||||
| #################################################################################################### | ||||
| ## Alternatively use this builder | ||||
| #################################################################################################### | ||||
| #FROM rust:latest AS builder | ||||
| # | ||||
| #RUN rustup target add x86_64-unknown-linux-musl | ||||
| #RUN apt update && apt install -y musl-tools musl-dev | ||||
| #RUN update-ca-certificates | ||||
| # | ||||
| ## Create appuser | ||||
| #ENV USER=myip | ||||
| #ENV UID=10001 | ||||
| # | ||||
| #RUN adduser \ | ||||
| #    --disabled-password \ | ||||
| #    --gecos "" \ | ||||
| #    --home "/nonexistent" \ | ||||
| #    --shell "/sbin/nologin" \ | ||||
| #    --no-create-home \ | ||||
| #    --uid "${UID}" \ | ||||
| #    "${USER}" | ||||
| # | ||||
| # | ||||
| #WORKDIR /myip | ||||
| # | ||||
| #COPY ./ . | ||||
| # | ||||
| #RUN cargo build --target x86_64-unknown-linux-musl --release | ||||
							
								
								
									
										46
									
								
								docker/distroless.Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								docker/distroless.Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| #################################################################################################### | ||||
| ## Builder | ||||
| #################################################################################################### | ||||
| FROM rust:latest AS builder | ||||
|  | ||||
| RUN update-ca-certificates | ||||
|  | ||||
| # Create appuser | ||||
| ENV USER=small-rust | ||||
| ENV UID=10001 | ||||
|  | ||||
| RUN adduser \ | ||||
|     --disabled-password \ | ||||
|     --gecos "" \ | ||||
|     --home "/nonexistent" \ | ||||
|     --shell "/sbin/nologin" \ | ||||
|     --no-create-home \ | ||||
|     --uid "${UID}" \ | ||||
|     "${USER}" | ||||
|  | ||||
|  | ||||
| WORKDIR /app | ||||
|  | ||||
| COPY ./ . | ||||
|  | ||||
| # We no longer need to use the x86_64-unknown-linux-musl target | ||||
| RUN cargo build --release | ||||
|  | ||||
| #################################################################################################### | ||||
| ## Final image | ||||
| #################################################################################################### | ||||
| FROM gcr.io/distroless/cc | ||||
|  | ||||
| # Import from builder. | ||||
| COPY --from=builder /etc/passwd /etc/passwd | ||||
| COPY --from=builder /etc/group /etc/group | ||||
|  | ||||
| WORKDIR /app | ||||
|  | ||||
| # Copy our build | ||||
| COPY --from=builder /app/target/release/small-rust ./ | ||||
|  | ||||
| # Use an unprivileged user. | ||||
| USER small-rust:small-rust | ||||
|  | ||||
| CMD ["/app/small-rust"] | ||||
							
								
								
									
										47
									
								
								docker/scratch.Dockerfile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								docker/scratch.Dockerfile
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| #################################################################################################### | ||||
| ## Builder | ||||
| #################################################################################################### | ||||
| FROM rust:latest AS builder | ||||
|  | ||||
| RUN rustup target add x86_64-unknown-linux-musl | ||||
| RUN apt update && apt install -y musl-tools musl-dev | ||||
| RUN update-ca-certificates | ||||
|  | ||||
| # Create appuser | ||||
| ENV USER=small-rust | ||||
| ENV UID=10001 | ||||
|  | ||||
| RUN adduser \ | ||||
|     --disabled-password \ | ||||
|     --gecos "" \ | ||||
|     --home "/nonexistent" \ | ||||
|     --shell "/sbin/nologin" \ | ||||
|     --no-create-home \ | ||||
|     --uid "${UID}" \ | ||||
|     "${USER}" | ||||
|  | ||||
|  | ||||
| WORKDIR /app | ||||
|  | ||||
| COPY ./ . | ||||
|  | ||||
| RUN cargo build --target x86_64-unknown-linux-musl --release | ||||
|  | ||||
| #################################################################################################### | ||||
| ## Final image | ||||
| #################################################################################################### | ||||
| FROM scratch | ||||
|  | ||||
| # Import from builder. | ||||
| COPY --from=builder /etc/passwd /etc/passwd | ||||
| COPY --from=builder /etc/group /etc/group | ||||
|  | ||||
| WORKDIR /app | ||||
|  | ||||
| # Copy our build | ||||
| COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/small-rust ./ | ||||
|  | ||||
| # Use an unprivileged user. | ||||
| USER small-rust:small-rust | ||||
|  | ||||
| CMD ["/app/small-rust"] | ||||
		Reference in New Issue
	
	Block a user