Autonomous Execution

© 2026 HY13dev™. All Rights Reserved.
Get in touch
HY13dev Logo
Home
Home
Projects Icon
ProjectsProjects
Education Icon
EducationEducation
Experience Icon
ExperienceExperience
Contact Icon
ContactContact
YlyaBot Icon
YlyaBotYlyaBot
Ylya Martchenko
2026
Back to Projects
Full Stack Developer•Senior Software Engineer•Next.js & React Expert•GenAI & RAG Systems Engineer•Full Stack Developer•Senior Software Engineer•Next.js & React Expert•GenAI & RAG Systems Engineer•

Dockercraft

Systems & DevOps EngineerRevival & OptimizationForked
Live Sync

Dockercraft revival: Manage Minecraft servers with Docker on any system, including native support for ARM (Apple Silicon) and standard x86 architectures.

Project Overview

Dockercraft is an immersive Minecraft Docker client that visualizes and manages Docker containers directly inside a 3D multiplayer Minecraft world. By wrapping Cuberite (a lightweight C++ Minecraft game server) and leveraging a custom Go-based daemon alongside Lua plugins, Dockercraft bridges the Docker remote API and the Minecraft server's internal voxel world. Inside the game, running and stopped containers are represented as distinct blue and orange wool structures, fully equipped with interactive buttons and levers to start, stop, or remove containers, alongside wall signs displaying real-time CPU and Memory usage metrics. This fork successfully revives the abandoned, highly unstable original project, upgrading legacy Go code to Go 1.23, standardizing modern Go modules, packaging the execution pipeline using multi-stage multi-architecture Dockerfiles, introducing cross-compilation support for both ARM64 (Apple Silicon) and x86_64, and integrating automatic architecture-detection scripts in the orchestrating Makefile.

View on GitHub

Specifications

  • My RoleSystems & DevOps Engineer
  • Development PhaseRevival & Optimization
  • Languages
    GoLuaMakefileC++
  • Tools & Frameworks
    DockerCuberite (Minecraft Server)Go ModulesMulti-stage Docker BuildsMulti-arch Builds (ARM64/x86_64)Alpine LinuxDebian Linux

Execution Latency

Sub-second event synchronization. Real-time Docker daemon container state changes (start, die, destroy) are intercepted via the SDK events channel and broadcasted to Cuberite within < 50ms, while real-time memory and CPU resource stats updates are throttled at 500ms intervals to prevent network congestion.

UI Performance

325ms server initialization latency. The fully containerized Cuberite Minecraft-compatible server completes startup and begins listening on port 25565 in just 325ms, delivering solid 20 TPS (Ticks Per Second) server-side game performance with smooth voxel grid rendering using custom queue batching.

Operational Cost

Zero runtime package retrieval overhead. Prior to the optimization, the container fetched the Docker CLI at runtime. By integrating a multi-stage Alpine build, the final runner image is fully self-contained and pre-packaged at 180MB, minimizing container initialization overhead and completely eliminating runtime network dependencies.

Engineering Highlights & Achievements

1

Modern Go 1.23 Migration: Ported a legacy, unmaintained Go 1.4 proxy daemon to Go 1.23, replacing obsolete vendoring dependencies (vendor.conf) with standard Go modules, and resolving modern library deprecations.

2

Multi-Stage & Multi-Architecture Docker Pipeline: Orchestrated an efficient, multi-stage multi-architecture Dockerfile building target binaries for both amd64 (x86_64) and arm64 (Apple Silicon / aarch64) without cross-architecture compilation overhead.

3

Container-Native Docker CLI Integration: Replaced the fragile runtime downloading of Docker binaries with system-level package integration and exec.LookPath runtime lookups, eliminating external internet dependencies during startup and improving security.

4

Cuberite Lua Socket Protocol: Integrated asynchronous TCP communication over port 25566 between the Go daemon (monitoring Docker events) and the Cuberite Lua plugin to synchronize container states with sub-second latency.

Engineering Challenges (STAR Method)

Exhaustive situation-action-result breakdowns showcasing problem-solving and architectural execution.

CHALLENGE 1

Situation & Impediment

The original project used pre-Go modules vendoring, unmaintained Docker client APIs, and outdated C++ Cuberite builds that failed to compile or run on modern Linux versions, rendering the project completely unbuildable and dead.

Engineering Action

Upgraded the daemon to Go 1.23, integrated the modern github.com/docker/docker API v25.0.3+incompatible, rewrote socket handling, event monitors, and standard library logs, and overhauled the Dockerfile into a multi-stage pipeline utilizing Alpine and Debian Slim images.

Architectural Deep Dive

Low-level component relationships, system boundaries, and runtime flows.

The Dockercraft architecture is a dual-process system comprised of a highly efficient game loop and a systems daemon. (1) Systems Daemon (Go Proxy): Written in Go 1.23, this background process runs inside the main container. It communicates with the host's Docker engine via a mounted UNIX socket (/var/run/docker.sock). It monitors container events in real time using the official Docker SDK, calculates CPU usage percentage dynamically (utilizing historical delta comparisons), and calculates memory consumption metrics. (2) Custom Minecraft Game Server (Cuberite): A lightweight, high-performance C++ Minecraft server that hosts the 3D voxel environment. (3) Communication Protocol: The Go daemon starts a TCP Server on port 25566. The Cuberite server loads a custom Lua plugin (Docker) which connects to this TCP socket as a client. Real-time system events (create, start, stop, stats) are serialized as newline-delimited JSON messages (TCPMessage struct) and pushed across the local socket. The Lua plugin parses these messages and adds block updates to an internal UpdateQueue. This queue throttles voxel modifications per tick to avoid CPU spikes. In-game player interactions (such as pulling a lever or pushing a button) are captured by Cuberite block hooks, which compile commands and transmit them back to the Go proxy, invoking standard docker start, docker stop, or docker rm CLI executions.

Lessons Learned & Core Takeaways

Reviving a decade-old, abandoned open-source project teaches critical lessons about software rot, architectural decoupling, and the challenges of embedding system orchestrations inside game engines. First, relying on external, runtime-downloaded binaries is a major anti-pattern; shifting to container-native multi-stage pre-bundling dramatically increases predictability and build resilience. Second, when bridging system-level events (like Docker containers) with rendering loops (like a Minecraft server), strict throttle and queue mechanisms are indispensable; direct synchronous writes to the world state quickly lead to engine blockages and thread starvation. Finally, ensuring multi-arch compatibility (ARM64 & x86_64) from day one is essential in modern development environments, especially for local dev tools where modern developers heavily utilize Apple Silicon.

  • Stars0
  • Forks1
  • Last Updated5/25/2026
  • 5

    Dynamic Voxel Rendering Queue: Optimized voxel chunk updates within Minecraft using a custom-built Lua UpdateQueue class that throttles block replacements per tick, preventing server crashes and frame drops.

    6

    Unified Makefile Orchestration: Automated multi-architecture image construction, container lifetime management, and instant biome variations (Ocean, Desert, Forest, Jungle) using shell script selectors in the Makefile.

    Quantifiable Result

    Successfully resurrected the application from a broken state into a stable, compilable, and highly responsive modern stack that passes standard formatting and linters.

    CHALLENGE 2

    Situation & Impediment

    The legacy build system only produced x86_64 binaries, meaning Mac users running Apple Silicon M-series chips or developers utilizing ARM64 cloud instances were completely blocked from running the container locally due to architecture mismatch issues.

    Engineering Action

    Designed a multi-arch multi-stage Docker build pipeline leveraging TARGETARCH arguments and wrote shell detection logic inside both the Dockerfile and Makefile to dynamically pull appropriate compiler images, static Docker CLI archives, and compatible Cuberite engine builds.

    Quantifiable Result

    Enabled seamless native execution on both Apple Silicon (ARM64) and standard Intel/AMD (x86_64) platforms, reducing startup overhead on M-series Macs to zero translation delay.

    CHALLENGE 3

    Situation & Impediment

    During state listing or when multiple containers started simultaneously, the Minecraft world would experience desynchronized state rendering, where block updates occurred out of order or older container structures completely vanished from the map until manually forced to re-render.

    Engineering Action

    Debugged the Lua engine, identified rendering race conditions within the chunk manager, implemented a robust batch-based UpdateQueue that schedules changes incrementally (throttled by MAX_BLOCK_UPDATE_PER_TICK), and added an explicit double-rendering pass in docker.lua to enforce sign line state hydration.

    Quantifiable Result

    Resolved all map rendering failures and desynchronizations, maintaining stable 20 TPS server performance during high-throughput container creation operations.