flowchart TD
subgraph BASE["Base Build Stage"]
direction TB
Ba1["python:3.12-slim"]:::base
Ba2["Create non-root lrs user/group
UID 10001"]:::base
Ba1 --> Ba2
end
subgraph BUILDER["Builder Build Stage"]
direction TB
Bu1["Copy in uv binary"]:::build
Bu2["Copy pyproject.toml + uv.lock"]:::build
Bu3["uv sync --frozen
dependency layer"]:::build
Bu4["Copy src/"]:::build
Bu5["uv sync --frozen
application layer"]:::build
Bu6["Populated .venv/ and src/
uv + build cache left behind"]:::keep
Bu1 --> Bu2 --> Bu3 --> Bu4 --> Bu5 --> Bu6
end
subgraph RUNTIME["Runtime Build Stage"]
direction TB
Ru1["USER lrs"]:::run
Ru2["EXPOSE 8080"]:::run
Ru3["HEALTHCHECK: lrs healthcheck"]:::run
Ru4["ENTRYPOINT [lrs]"]:::run
Ru5["Final shippable image"]:::run
Ru1 --> Ru2 --> Ru3 --> Ru4 --> Ru5
end
BASE -->|FROM base| BUILDER
BASE -->|FROM base| RUNTIME
Bu6 -->|"COPY --from=builder: .venv/ and src/ ONLY"| Ru1
classDef base fill:#8b9bb0,stroke:#5f6e82,color:#fff,font-size:13px
classDef build fill:#e9a23b,stroke:#b8791f,color:#222,font-size:13px
classDef keep fill:#c9822b,stroke:#8a5a1c,color:#fff,font-size:13px
classDef run fill:#2a9d8f,stroke:#1f7a6f,color:#fff,font-size:13px
linkStyle default stroke:#999,stroke-width:2px