mikronova/kyokkou
docker/Dockerfile.bundled
# Bundled image: Rust egui UI + Python bpy agent in one container.
# Build the agent-only base first, then pass it as BASE.
#
# podman build --build-arg BASE=kyokkou-rocm \
# -f docker/Dockerfile.bundled -t kyokkou-bundled-rocm .
#
# Run (Wayland):
# podman run --rm \
# -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
# -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY:ro \
# -e XDG_RUNTIME_DIR=/tmp \
# --device /dev/kfd --device /dev/dri \
# -v /tmp/kyokkou/out:/out \
# kyokkou-bundled-rocm
#
# Run (X11):
# podman run --rm \
# -e DISPLAY=$DISPLAY \
# -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
# --device /dev/kfd --device /dev/dri \
# -v /tmp/kyokkou/out:/out \
# kyokkou-bundled-rocm
ARG BASE=kyokkou-cpu
# --- build stage: compile Rust binary ---
FROM docker.io/library/rust:slim AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libssl-dev \
libxkbcommon-dev \
libwayland-dev \
libx11-dev \
libxi-dev \
libxrandr-dev \
libxext-dev \
libxfixes-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY Cargo.toml Cargo.lock ./
COPY src/ ./src/
RUN cargo build --release
# --- runtime stage ---
FROM $BASE
# Wayland + X11 runtime libs for egui (X11 libs already in base via bpy deps)
RUN apt-get update && apt-get install -y --no-install-recommends \
libwayland-client0 \
libwayland-egl1 \
libxkbcommon0 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /build/target/release/kyokkou /usr/local/bin/kyokkou
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]