# Mission — Containers & Local Dev

## Why this course exists

The learner is preparing for **interviews and certification**, and wants to *cover
everything in this repo's `deployments/` domain* — Kubernetes, Helm, Istio, CI/CD runners,
Docker, observability, Terraform. That's far too much for one course, so it's split into
**seven** (see the roadmap in [index.html](./index.html)). **This is Course 1 — the
foundation the other six stand on.**

You cannot understand Kubernetes, Helm charts, or the CI/CD pipeline until you understand the
**container** they all ship, run, and orchestrate. So this course starts at the bottom: what a
container actually *is*, how images are built, how you run them, and how this repo wires ~25
services together for local development.

## Who the learner is

- Backend engineer on the **conversationmgmt / notification / spike** team — strong in Go,
  gRPC, Kafka, Postgres, Airflow (five courses already completed).
- **Newer to infrastructure / DevOps.** Containers, Kubernetes, and the deployment stack are
  new territory. Assume strong general engineering maturity, *not* ops fluency.
- Uses this repo's local stack daily (`./local/run.bash`, `make`), so "the thing I already
  type every day" is the best possible anchor for new concepts.

## What "success" looks like

By the end of this course, the learner can, from memory:

1. Explain what a container is and how it differs from a VM — the namespaces/cgroups answer,
   not the hand-wave.
2. Read a `Dockerfile`, explain image **layers**, and say why layer order affects build speed.
3. Run a container with the right ports, volumes, env vars, and network — and debug one that
   won't start.
4. Read a `docker-compose.yaml`, explain `depends_on` / healthchecks / named vs bind volumes,
   and describe how this repo's ~25-service local stack is wired.
5. Explain this repo's **env × org** model and the two local stacks (docker-compose via
   `run.bash` vs kind + Skaffold via `sk.bash`) — the on-ramp to the Kubernetes course.

## Grounding

Every concept lands on a real file in this repo — `local/Dockerfile.development`,
`local/docker-compose.*.yaml`, `local/run.bash`, `deployments/sk.bash`, `skaffold.*.yaml` —
cited by path and line in [reference/repo-containers-map.md](./reference/repo-containers-map.md).
External claims are cited to Docker, OCI, Compose, Skaffold, and kind's official docs
([RESOURCES.md](./RESOURCES.md)) — never to my own memory.

## The seven-course plan (decided this session)

1. **Containers & Local Dev** ← *you are here* (foundations)
2. Kubernetes — the orchestrator (Deployments, Services, KEDA, HPA/VPA/PDB)
3. Helm — how this repo templates ~106 charts (incl. SOPS secrets)
4. Istio & Service Mesh — VirtualServices, EnvoyFilters, the gateway
5. CI/CD & Delivery — GitHub Actions, trunk-based deploy, ARC runners, binary authorization
6. Observability & Monitoring — Prometheus / Grafana / Thanos / Jaeger / OTel / Kiali
7. Infrastructure as Code — Terraform, GCP (GKE/Cloud SQL/VPC/IAM/KMS), Workload Identity
