Skip to the content.

ADR-0029: Docker Containerization

Decision: Three slim Python 3.11 containers (scheduler, EDL server, health monitor) sharing a named gnat-workspace volume; Compose profiles for optional services.

Why three containers: Each service has a different availability requirement:

Running them in separate containers means an EDL outage doesn’t affect scheduling and a scheduler crash doesn’t take down the EDL server.

Named volume: gnat-workspace is the shared persistence layer. All three containers mount it read-write. The WorkspaceManager handles concurrent access safely (SQLite WAL mode; FlatFileStore uses atomic writes).

Compose profiles:

This keeps the base deployment minimal while allowing operators to opt into observability components.

.devcontainer integration: The devcontainer config includes the Rust toolchain and Docker-in-Docker so that Rust extension development and Docker testing both work in VS Code / Codespaces without local tool installation.


Licensed under the Apache License, Version 2.0