diff --git a/language/rust/develop.md b/language/rust/develop.md index 926769b934..095e66082c 100644 --- a/language/rust/develop.md +++ b/language/rust/develop.md @@ -96,13 +96,88 @@ For the sample application, you'll use a variation of the backend from the react ? What port does your server listen on? 8000 ``` -3. In the cloned repository's directory, run `docker build` to build the image. +3. In the cloned repository's directory, open the `Dockerfile` in an IDE or text editor to update it. + + `docker init` handled creating most of the instructions in the Dockerfile, but you'll need to update it for your unique application. In addition to a `src` directory, this application includes a `migrations` directory to initialize the database. Add a bind mount for the `migrations` directory to the build stage in the Dockerfile. The following is the updated Dockerfile. + + ```dockerfile + # 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/engine/reference/builder/ + + ################################################################################ + # Create a stage for building the application. + + ARG RUST_VERSION=1.70.0 + ARG APP_NAME=react-rust-postgres + FROM rust:${RUST_VERSION}-slim-bullseye AS build + ARG APP_NAME + WORKDIR /app + + # Build the application. + # Leverage a cache mount to /usr/local/cargo/registry/ + # for downloaded 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/ \ + --mount=type=cache,target=/usr/local/cargo/registry/ \ + --mount=type=bind,source=migrations,target=migrations \ + <