Gunnar

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