Files
rsh/Dockerfile
2026-05-12 23:19:12 +09:00

55 lines
2.0 KiB
Docker

FROM messense/rust-musl-cross:x86_64-musl AS stub-amd64
WORKDIR /build
COPY Cargo.toml Cargo.lock* ./
COPY crates ./crates
RUN --mount=type=cache,target=/root/.cargo/registry \
--mount=type=cache,target=/build/target \
cargo build --release --target x86_64-unknown-linux-musl -p rsh && \
cp target/x86_64-unknown-linux-musl/release/rsh /rsh-x86_64
FROM messense/rust-musl-cross:aarch64-musl AS stub-arm64
WORKDIR /build
COPY Cargo.toml Cargo.lock* ./
COPY crates ./crates
RUN --mount=type=cache,target=/root/.cargo/registry \
--mount=type=cache,target=/build/target \
cargo build --release --target aarch64-unknown-linux-musl -p rsh && \
cp target/aarch64-unknown-linux-musl/release/rsh /rsh-aarch64
FROM rust:1.95.0-trixie AS chef
RUN cargo install cargo-chef --locked
WORKDIR /build
FROM chef AS planner
COPY Cargo.toml Cargo.lock* ./
COPY crates ./crates
RUN cargo chef prepare --recipe-path recipe.json
FROM chef AS builder
COPY --from=stub-amd64 /rsh-x86_64 /stubs/rsh-x86_64
COPY --from=stub-arm64 /rsh-aarch64 /stubs/rsh-aarch64
COPY --from=planner /build/recipe.json recipe.json
ENV RSH_STUB_X86_64=/stubs/rsh-x86_64 \
RSH_STUB_AARCH64=/stubs/rsh-aarch64
RUN --mount=type=cache,target=/usr/local/cargo/registry \
cargo chef cook --release -p rsh-backend --recipe-path recipe.json
COPY Cargo.toml Cargo.lock* ./
COPY crates ./crates
RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/build/target \
cargo build --release -p rsh-backend && \
cp target/release/rsh-backend /usr/local/bin/rsh-backend
FROM debian:bookworm-slim AS runtime
RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates tini && \
rm -rf /var/lib/apt/lists/* && \
useradd --system --uid 10001 --home /var/lib/rsh --create-home rsh
COPY --from=builder /usr/local/bin/rsh-backend /usr/local/bin/rsh-backend
ENV RSH_DATA=/var/lib/rsh \
RSH_BIND=0.0.0.0:7777 \
RSH_LOG=info
EXPOSE 7777
VOLUME ["/var/lib/rsh"]
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/rsh-backend"]