Dockerfile templates for rust projects
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | /target | ||||||
							
								
								
									
										7
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | # This file is automatically @generated by Cargo. | ||||||
|  | # It is not intended for manual editing. | ||||||
|  | version = 3 | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "small-rust" | ||||||
|  | version = "0.1.0" | ||||||
							
								
								
									
										11
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | [package] | ||||||
|  | name = "small-rust" | ||||||
|  | version = "0.1.0" | ||||||
|  | edition = "2021" | ||||||
|  |  | ||||||
|  | [dependencies] | ||||||
|  |  | ||||||
|  | [profile.release] | ||||||
|  | lto = true | ||||||
|  | codegen-units = 1 | ||||||
|  | strip = "symbols" | ||||||
							
								
								
									
										10
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | services: | ||||||
|  |   small-rust-distroless: | ||||||
|  |     build: | ||||||
|  |       dockerfile: ./docker/distroless.Dockerfile | ||||||
|  |   small-rust-alpine: | ||||||
|  |     build: | ||||||
|  |       dockerfile: ./docker/alpine.Dockerfile | ||||||
|  |   small-rust-scratch: | ||||||
|  |     build: | ||||||
|  |       dockerfile: ./docker/scratch.Dockerfile | ||||||
							
								
								
									
										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"] | ||||||
							
								
								
									
										3
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fn main() { | ||||||
|  |     println!("Hello, world!"); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user