# Dockerfile for Rust

**URL:** <https://forum.hhf.technology/t/dockerfile-for-rust/365>\
**Category:** Python\
**Tags:** dockerfile, rust, docker\
**Created:** [November 6, 2024, 5:09pm UTC](https://forum.hhf.technology/t/dockerfile-for-rust/365 "2024-11-06T17:09:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![hhf.technoloy](https://forum.hhf.technology/user_avatar/forum.hhf.technology/hhf.technoloy/32/68_2.png) [@hhf.technoloy](https://forum.hhf.technology/u/hhf.technoloy)\
**Post date:** [November 6, 2024, 5:09pm UTC](https://forum.hhf.technology/t/dockerfile-for-rust/365/1 "2024-11-06T17:09:21Z")

</div>

### Template Dockerfile for Rust programming languages.

#### A common version that you usually see:

```dockerfile
FROM rust:1.70.0-slim-bullseye

# View app name in Cargo.toml
ARG APP_NAME=devopsvn

WORKDIR /app

COPY . .
RUN cargo build --locked --release
RUN cp ./target/release/$APP_NAME /bin/server

ENV ROCKET_ADDRESS=0.0.0.0
CMD ["/bin/server"]

```

#### But it doesn’t reuse cache layer and optimizes. Reuse cache layer for build faster:

```dockerfile
FROM rust:1.70.0-slim-bullseye

# View app name in Cargo.toml
ARG APP_NAME=devopsvn

WORKDIR /app

COPY Cargo.lock Cargo.toml ./
RUN mkdir src \
    && echo "// dummy file" > src/lib.rs \
    && cargo build --release

COPY src src
RUN cargo build --locked --release
RUN cp ./target/release/$APP_NAME /bin/server

ENV ROCKET_ADDRESS=0.0.0.0
CMD ["/bin/server"]

```

#### Optimize Image size with multi-stage:

```dockerfile
FROM rust:1.70.0-slim-bullseye AS build

# View app name in Cargo.toml
ARG APP_NAME=devopsvn

WORKDIR /build

COPY Cargo.lock Cargo.toml ./
RUN mkdir src \
    && echo "// dummy file" > src/lib.rs \
    && cargo build --release

COPY src src
RUN cargo build --locked --release
RUN cp ./target/release/$APP_NAME /bin/server

FROM debian:bullseye-slim AS final
COPY --from=build /bin/server /bin/
ENV ROCKET_ADDRESS=0.0.0.0
CMD ["/bin/server"]

```

#### With non-privileged users:

```dockerfile
FROM rust:1.70.0-slim-bullseye AS build

# View app name in Cargo.toml
ARG APP_NAME=devopsvn

WORKDIR /build

COPY Cargo.lock Cargo.toml ./
RUN mkdir src \
    && echo "// dummy file" > src/lib.rs \
    && cargo build --release

COPY src src
RUN cargo build --locked --release
RUN cp ./target/release/$APP_NAME /bin/server

FROM debian:bullseye-slim AS final

RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "/nonexistent" \
    --shell "/sbin/nologin" \
    --no-create-home \
    --uid "10001" \
    appuser
USER appuser

COPY --from=build /bin/server /bin/
ENV ROCKET_ADDRESS=0.0.0.0
CMD ["/bin/server"]

```
