diff --git a/Dockerfile b/Dockerfile index e32e886..9a930f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,66 +1,16 @@ # syntax=docker/dockerfile:1 -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/go/dockerfile-reference/ +ARG RUST_VERSION=1.78 -# Want to help us make this template better? Share your feedback here: https://forms.gle/ybq9Krt8jtBL3iCk7 - -ARG RUST_VERSION=1.77.2 -ARG APP_NAME=prodzilla - -################################################################################ -# xx is a helper for cross-compilation. -# See https://github.com/tonistiigi/xx/ for more information. -FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.3.0 AS xx - -################################################################################ -# Create a stage for building the application. FROM --platform=$BUILDPLATFORM rust:${RUST_VERSION}-alpine AS build -ARG APP_NAME -WORKDIR /app -# Copy cross compilation utilities from the xx stage. -COPY --from=xx / / - -# Install host build dependencies. -RUN apk add --no-cache clang lld musl-dev git file libressl-dev pkgconfig - -# This is the architecture you’re building for, which is passed in by the builder. -# Placing it here allows the previous steps to be cached across architectures. -ARG TARGETPLATFORM +WORKDIR /app -# Install cross compilation build dependencies. -RUN xx-apk add --no-cache musl-dev gcc +RUN apk add --no-cache musl-dev libressl-dev -# Build the application. -# Leverage a cache mount to /usr/local/cargo/registry/ -# for downloaded dependencies, a cache mount to /usr/local/cargo/git/db -# for git repository dependencies, and a cache mount to /app/target/ for -# compiled dependencies which will speed up subsequent builds. -# Leverage a bind mount to the src directory to avoid having to copy the -# source code into the container. Once built, copy the executable to an -# output directory before the cache mounted /app/target is unmounted. -RUN --mount=type=bind,source=src,target=src \ - --mount=type=bind,source=Cargo.toml,target=Cargo.toml \ - --mount=type=bind,source=Cargo.lock,target=Cargo.lock \ - --mount=type=cache,target=/app/target/,id=rust-cache-${APP_NAME}-${TARGETPLATFORM} \ - --mount=type=cache,target=/usr/local/cargo/git/db \ - --mount=type=cache,target=/usr/local/cargo/registry/ \ -xx-cargo build --locked --release --target-dir ./target && \ -cp ./target/$(xx-cargo --print-target-triple)/release/$APP_NAME /bin/$APP_NAME && \ -xx-verify /bin/$APP_NAME +COPY . . +RUN cargo build --locked --release --target-dir target && cp ./target/release/prodzilla /bin/prodzilla -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the alpine image as the foundation for running the app. -# By specifying the "3.18" tag, it will use version 3.18 of alpine. If -# reproducability is important, consider using a digest -# (e.g., alpine@sha256:664888ac9cfd28068e062c991ebcff4b4c7307dc8dd4df9e728bedde5c449d91). FROM alpine:3.18 AS final # Create a non-privileged user that the app will run under. @@ -77,7 +27,7 @@ RUN adduser \ USER appuser # Copy the executable from the "build" stage. -COPY --from=build /bin/$APP_NAME /bin/ +COPY --from=build /bin/prodzilla /bin/ # Expose the port that the application listens on. EXPOSE 3000