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