# syntax=docker/dockerfile:1.7 # Build Solstice Orchestrator # Uses vm-manager (direct QEMU) instead of libvirt — only needs /dev/kvm at runtime FROM docker.io/library/rust:bookworm AS builder ENV CARGO_HOME=/cargo WORKDIR /work # Install build dependencies: protoc, DB headers, pkg-config RUN apt-get update \ && apt-get install -y --no-install-recommends \ protobuf-compiler libprotobuf-dev pkg-config libsqlite3-dev libpq-dev ca-certificates \ && rm -rf /var/lib/apt/lists/* # Configure cargo target-dir so it can be cached between layers RUN mkdir -p /cargo && printf "[build]\ntarget-dir = \"/cargo/target\"\n" > /cargo/config.toml # Copy source COPY Cargo.toml Cargo.lock ./ COPY crates ./crates # Build orchestrator (vm-manager fetched as git dep from GitHub) RUN --mount=type=cache,target=/cargo/registry,sharing=locked \ --mount=type=cache,target=/cargo/git,sharing=locked \ --mount=type=cache,target=/cargo/target,sharing=locked \ cargo build --release -p orchestrator \ && cp /cargo/target/release/orchestrator /orchestrator FROM docker.io/library/ubuntu:24.04 # Runtime: QEMU for VMs, qemu-utils for qemu-img, DB client libs RUN apt-get update \ && apt-get install -y --no-install-recommends \ libsqlite3-0 libpq5 ca-certificates \ qemu-system-x86 qemu-utils \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /orchestrator /usr/local/bin/solstice-orchestrator EXPOSE 8081 ENTRYPOINT ["/usr/local/bin/solstice-orchestrator"]