solstice-ci/deploy/images/orchestrator/Containerfile
Till Wegmueller b5c7078adc Switch vm-manager to git dep + multi-stage Containerfile
- Use HTTPS git dep for vm-manager (works in CI and container builds)
- Add .cargo/ to .gitignore (local dev patch override)
- Restore multi-stage Containerfile: Rust build stage fetches vm-manager
  from GitHub, Ubuntu 24.04 runtime with QEMU
- Host orchestrator stopped and disabled (container-only from now on)
2026-04-07 17:24:17 +02:00

34 lines
1.4 KiB
Docker

# 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"]