runbooks
Enterprise CloudOps Automation Toolkit - Multi-variant DevContainer
7.7K
Enterprise CloudOps automation runtime for teams running AWS/Azure automation, AI agent workflows, Jupyter notebooks, and data analytics — all from a single supply-chain-hardened image family.
nnthanh101/runbooks is a Chainguard Wolfi-based container family for CloudOps automation, Jupyter analytics, and AI agent workflows. All variants share one non-root, supply-chain-hardened base — only the toolset changes. For Command-Center: pull :prod; for DevContainer or CI: pull :full.
# Command-Center production (JupyterLab + runbooks + Vizro)
docker pull nnthanh101/runbooks:prod
docker run -it --rm -p 8888:8888 \
-v ~/.aws:/home/os/.aws:ro \
-v $(pwd):/app/notebooks \
nnthanh101/runbooks:prod
# Full devcontainer (all features)
docker pull nnthanh101/runbooks:full
docker run -it --rm \
-v ~/.aws:/home/os/.aws:ro \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
nnthanh101/runbooks:full
# VS Code DevContainer
# F1 → "Dev Containers: Reopen in Container"
# PyPI package (the runbooks CLI tool)
pip install runbooks
runbooks --help
| Who | CloudOps/Python engineers automating AWS; FinOps analysts; Data scientists; Command-Center operators |
| What | Python 3.13 + UV + boto3 + Click + Rich + JupyterLab + Vizro + MkDocs + AWS/Azure CLI |
| When | Daily CloudOps runbooks, AWS automation, FinOps dashboards, Jupyter analysis, PyPI publishing |
| Where | VS Code DevContainer (daily dev), GH Actions CI, Command-Center production, PyPI pipeline |
| Why | Python-first toolchain; IaC tools (Terraform, CDK) would bloat this image unnecessarily |
| How | Multi-stage Chainguard Wolfi build (builder → core → prod → full), uv lockfile, SHA256-pinned base |
| Tag | Dockerfile stage | Size est. | Use Case | Key Contents |
|---|---|---|---|---|
core | core | ~500MB | Minimal Python runtime | Python 3.13, UV, git, jq, task, bash |
prod | prod | ~500MB | Command-Center production | core + runbooks PyPI + JupyterLab (auto) + MkDocs + Vizro (manual) |
full / latest | latest | ~1.5GB | All features (devcontainer, CI/act) | prod + AWS CLI v2 + Azure CLI + Ansible + Node.js + CrewAI + MkDocs |
Tag simplification 2026-05-15:
core/prod/fullreplaces the formercore/cloudops/latesttaxonomy.latestis kept as an alias forfullfor backward compatibility.
prod (JupyterLab + Vizro + runbooks PyPI, minimal size)full (boto3 + AWS CLI v2 + Azure CLI included)core (Python + UV, no extras)act runner → full (all tools, Node.js, act-compatible)| Before | After |
|---|---|
| Separate Python environments per team | One nnthanh101/runbooks:<tag> per workload, same Wolfi base |
| Manual dependency conflict resolution | UV package manager — deterministic, reproducible installs |
| "It worked in Jupyter" failures in prod | Same Python 3.13 + boto3 in notebooks and production scripts |
| CrewAI environment setup: hours | docker pull nnthanh101/runbooks:full + run |
core (~500MB) for scripting, prod (~500MB) for notebooks, full (~1.5GB) for all-in-onelinux/amd64 + linux/arm64 — AWS Graviton spot instances for cost-sensitive batchversions.envos user (UID 11111) — no privileged container riskjobs:
automate:
runs-on: ubuntu-latest
container:
image: nnthanh101/runbooks:full
options: --user 0
steps:
- uses: actions/checkout@v4
- run: python scripts/aws-automation.py
| Category | Tool | Version | Source |
|---|---|---|---|
| Runtime | Python | 3.13 | Chainguard Wolfi base |
| UV (package manager) | 0.10.9 | Binary (SHA256) | |
| GitHub CLI (gh) | 2.88.1 | Binary (full only) | |
| Cloud | AWS CLI v2 | latest | Wolfi APK (full only) |
| Azure CLI | latest | Wolfi APK (full only) | |
| boto3 | latest | uv pip (all tags via /venv) | |
| Data / Notebooks | JupyterLab | ≥4.3.4 | uv pip (prod + full) |
| pandas, plotly, openpyxl | latest | uv pip (all tags) | |
| Vizro, vizro-ai | ≥0.1.46 | uv pip (prod + full) | |
| papermill, nbconvert | latest | uv pip (prod + full) | |
| AI/Agents | OpenAI, Anthropic, CrewAI | latest | uv pip (full only) |
| Documentation | MkDocs Material | latest | uv pip (prod + full) |
| Automation | Ansible | latest | Wolfi APK (full only) |
| Task runner | latest | Wolfi APK (all tags) | |
| Starship prompt | latest | Wolfi APK (all tags) | |
| Utilities | git, jq, vim, curl | latest | Wolfi APK (all tags) |
| Port | Service | Tag |
|---|---|---|
| 8888 | JupyterLab (jupyter.sh) | prod, full |
| 8000 | MkDocs serve (docs.sh) | prod, full |
| 8050 | Vizro / Dash (start manually: python -m vizro) | prod, full (vizro in /venv; not auto-started) |
cgr.dev/chainguard/wolfi-base — sigstore-signed, minimal CVE surfaceRUNBOOKS_BASE_IMAGE in versions.envos (UID 11111) across all tagsuv.lock) for deterministic buildsValidate → Build 3 tags (amd64+arm64) → Scan (Trivy) → Test → Push → GitHub Security (SARIF)
Mirror to ECR/ACR and reference by digest — no runtime Docker Hub dependency.
Content type
Image
Digest
sha256:95d61a28c…
Size
722.7 MB
Last updated
about 1 month ago
docker pull nnthanh101/runbooks