build(docker): Add Dockerfile
This commit is contained in:
parent
ba96e8c32f
commit
f339943e3b
42
Dockerfile
Normal file
42
Dockerfile
Normal file
@ -0,0 +1,42 @@
|
||||
# Dockerfile
|
||||
|
||||
# ---- Planner Stage ----
|
||||
# Use the official Rust Alpine image as a base for planning.
|
||||
# We use the same base image for planner and builder for consistency.
|
||||
FROM rust:1-alpine AS planner
|
||||
WORKDIR /app
|
||||
# Install cargo-chef for build caching
|
||||
RUN apk add --no-cache musl-dev # Needed by chef
|
||||
RUN cargo install cargo-chef --locked
|
||||
COPY . .
|
||||
# Compute dependencies. This output will be cached if Cargo.toml/lock haven't changed.
|
||||
RUN cargo chef prepare --recipe-path recipe.json
|
||||
|
||||
# ---- Builder Stage ----
|
||||
# Use the same Rust Alpine image for building.
|
||||
FROM rust:1-alpine AS builder
|
||||
WORKDIR /app
|
||||
# Install build dependencies for Alpine
|
||||
RUN apk add --no-cache build-base openssl-dev pkgconfig
|
||||
# Install cargo-chef again (could optimize but simpler this way)
|
||||
RUN cargo install cargo-chef --locked
|
||||
# Copy the dependency recipe from the planner stage
|
||||
COPY --from=planner /app/recipe.json recipe.json
|
||||
# Build dependencies based on the recipe. This layer is cached efficiently.
|
||||
RUN cargo chef cook --release --recipe-path recipe.json
|
||||
# Copy application code
|
||||
COPY . .
|
||||
# Build the application binary, linking against pre-built dependencies
|
||||
# Ensure the binary name matches your package name in Cargo.toml
|
||||
RUN cargo build --release --bin discord-music-bot-lavalink-rs
|
||||
|
||||
# ---- Runtime Stage ----
|
||||
# Use a minimal Alpine image for the final runtime environment.
|
||||
FROM alpine:latest
|
||||
WORKDIR /app
|
||||
# Install runtime dependencies needed by the binary (e.g., SSL certs)
|
||||
RUN apk add --no-cache ca-certificates openssl
|
||||
# Copy the compiled application binary from the builder stage
|
||||
COPY --from=builder /app/target/release/discord-music-bot-lavalink-rs /app/
|
||||
# Set the binary as the entrypoint
|
||||
CMD ["./discord-music-bot-lavalink-rs"]
|
||||
Loading…
x
Reference in New Issue
Block a user