2f45f5afec
Collapses the two-container Docker model (gateway + orchestrator) into one bot-bottle-infra container, matching the macOS and Firecracker backends. - Dockerfile.infra: now a shared gateway+orchestrator base (COPY bot_bottle from orchestrator build, no CMD override) - Dockerfile.infra.fc: new Firecracker-specific layer (buildah/crun/netavark) - gateway_init: adds orchestrator daemon with _OPT_IN_DAEMONS gating so it only starts when BOT_BOTTLE_GATEWAY_DAEMONS explicitly includes it - orchestrator/lifecycle: OrchestratorService manages one infra container; builds orchestrator (intermediate) then infra; live source bind-mounted at /bot-bottle-src with PYTHONPATH so the subprocess uses the checkout - backend/consolidated_util: extracts provision_bottle + teardown_consolidated shared across all three backends; removes duplication in docker/fc/macos consolidated_launch modules - firecracker/infra_vm: builds four images (orchestrator→gateway→infra→infra.fc) - All unit tests updated and passing (1878 tests) - PRD status: Draft → Active
23 lines
1.2 KiB
Docker
23 lines
1.2 KiB
Docker
# Shared infra image: gateway data plane + orchestrator control plane.
|
|
#
|
|
# Used directly by the Docker backend (run as one `bot-bottle-infra`
|
|
# container, replacing the prior two-container split). The Firecracker
|
|
# backend extends this via Dockerfile.infra.fc, adding buildah/crun/
|
|
# netavark for in-VM agent-image building.
|
|
#
|
|
# Dockerfile.orchestrator is the single definition of the orchestrator
|
|
# content (the lean `bot_bottle` package on python:3.12-slim). Both this
|
|
# image and Dockerfile.infra.fc pull it in via `COPY --from`.
|
|
#
|
|
# multi-`FROM` can't union two bases (that's multi-stage, not multiple
|
|
# inheritance), so the orchestrator content is pulled in via `COPY --from`
|
|
# rather than a second base. Both images share the trixie `python:3.12-slim`
|
|
# base, so the copy is clean (same python; future installed deps copy too).
|
|
FROM bot-bottle-gateway:latest
|
|
|
|
# The orchestrator content, from its single definition. The gateway image
|
|
# already has the flat daemon modules under /app; this adds the full
|
|
# `bot_bottle` package so `python3 -m bot_bottle.orchestrator` resolves —
|
|
# used by gateway_init when BOT_BOTTLE_GATEWAY_DAEMONS includes `orchestrator`.
|
|
COPY --from=bot-bottle-orchestrator:latest /app/bot_bottle /app/bot_bottle
|