Gunnar

mikronova/kyokkou

docker/Dockerfile.base

# ARG before the first FROM = global scope, available to all FROM lines.
# Default 26.04. ROCm image passes --build-arg UBUNTU_VERSION=24.04 because
# AMD's ROCm 7.2.2 packages carry ~24.04 version suffixes the 26.04 resolver rejects.
ARG UBUNTU_VERSION=26.04

# Stage 1: build Go agent
FROM docker.io/library/golang:1.22-alpine AS agent-builder
WORKDIR /src
COPY docker/agent/go.mod ./
COPY docker/agent/main.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o kyokkou-agent .

# Stage 2: runtime
FROM docker.io/library/ubuntu:${UBUNTU_VERSION}

ENV DEBIAN_FRONTEND=noninteractive

# Blender runtime deps (X11, EGL, GL, input)
RUN apt-get update && apt-get install -y --no-install-recommends \
    libx11-6 \
    libxi6 \
    libxkbcommon0 \
    libxfixes3 \
    libxrender1 \
    libxxf86vm1 \
    libxrandr2 \
    libxext6 \
    libxcb1 \
    libxcb-util1 \
    libgl1 \
    libegl1 \
    libdbus-1-3 \
    libsm6 \
    libice6 \
    ca-certificates \
    wget \
    xz-utils \
 && rm -rf /var/lib/apt/lists/*

# Official Blender binary — ships its own Python, no pip needed.
# Update both ARGs together when bumping Blender version.
ARG BLENDER_VERSION=5.1.1
ARG BLENDER_SHORT=5.1
RUN wget -q "https://download.blender.org/release/Blender${BLENDER_SHORT}/blender-${BLENDER_VERSION}-linux-x64.tar.xz" \
 && tar xf blender-${BLENDER_VERSION}-linux-x64.tar.xz \
 && mv blender-${BLENDER_VERSION}-linux-x64 /opt/blender \
 && rm blender-${BLENDER_VERSION}-linux-x64.tar.xz \
 && ln -s /opt/blender/blender /usr/local/bin/blender

COPY --from=agent-builder /src/kyokkou-agent /usr/local/bin/kyokkou-agent
COPY docker/agent/scenes/ /agent/scenes/

RUN mkdir -p /in /out

EXPOSE 8080
CMD ["kyokkou-agent"]