Debrief: что узнал, production-чеклист
Финальный урок курса. Давай подведём итоги: что ты теперь знаешь, что отделяет local-стенд от prod, и куда двигаться дальше.
Что ты узнал по checkpoint’ам
Курс прошёл по 20 модулям. На каждом checkpoint’е ты узнал что-то базовое:
Модули 0-5: Основы.
- Что такое контейнер (процесс с namespaces + cgroups), а не VM.
- История от chroot до OCI.
- Docker Engine vs Docker Desktop vs OrbStack / Rancher / Podman.
- Образы, реестры, слои, manifest, digest.
- Storage drivers (overlay2 на linux).
Модули 6-9: Build & state.
- Dockerfile: FROM, RUN, COPY, CMD, multi-stage.
- BuildKit и BUILDX.
- HEALTHCHECK, USER, ENTRYPOINT vs CMD.
- Volumes vs bind mounts: где хранить state.
- Networks: bridge, host, custom networks, DNS внутри compose.
Модули 10-14: Compose & ops.
- docker compose как YAML-описание стека.
- Profiles, override, env files, secrets.
- Postgres, MinIO, Redis в compose.
- docker logs, exec, inspect для debug.
- Rootless containers, USER, image scanning через Trivy.
Модули 15-19: DE-применение.
- Python-образы: slim, multi-stage, uv для скоростной установки.
- Реальные DE-стеки: Airflow, Kafka KRaft, Spark cluster, ClickHouse.
- testcontainers-python для интеграционных тестов.
- GitHub Actions: build-push-action, multi-arch, integration тесты через compose —wait.
- Production-горизонт: приватные registries, signing, observability stack.
- Capstone: end-to-end pipeline — Producer -> Kafka -> Spark -> ClickHouse -> Grafana.
Это base level Junior DE по контейнерам. Многие выпускники bootcamp’ов не покрывают и половины этого. Ты в strong-позиции.
Где локальный стенд != production
Capstone-стенд работает. На ноутбуке. Это не значит, что он production-ready. Что отличает prod от local:
1. High availability
Local: один Kafka broker, один Spark master, один ClickHouse. Если ноутбук перезагрузился — downtime.
Prod: Kafka cluster 3+ brokers, Spark with YARN/k8s scheduling, ClickHouse cluster с replication. Single node failure — сервис продолжает работать.
2. Persistence и backups
Local: docker volumes. Если кто-то сделал docker volume rm -f — данные потеряны.
Prod:
- Postgres: managed RDS / Cloud SQL с point-in-time recovery, automated backups.
- Kafka: replication factor 3, separate disks для logs.
- ClickHouse: replicated MergeTree + бэкап через
clickhouse-backupв S3. - Объекты в S3 / GCS с versioning + lifecycle policies.
3. Secrets management
Local: .env файл. Уязвимость, если ноутбук compromised.
Prod: Vault / AWS Secrets Manager / GCP Secret Manager. Rotation, audit log, IAM-based access.
4. Network security
Local: все контейнеры в одном compose-network. Если producer compromised, он видит ClickHouse.
Prod:
- VPC с private subnets.
- Security groups / Network policies (k8s).
- mTLS между сервисами (через service mesh).
- WAF на front edges.
5. Observability
Local: Grafana с одним дашбордом. Логи теряются после compose down.
Prod:
- Metrics: Prometheus с long-term storage (Thanos / Cortex), retention 1-2 года.
- Logs: централизованный ELK / Loki / Datadog, retention по compliance.
- Traces: распределённый Tempo / Jaeger.
- Alerting: PagerDuty / Opsgenie, escalation policies.
- SLO / SLI: бюджет ошибок, on-call rotations.
6. CI/CD
Local: docker build, docker run.
Prod:
- CI builds: GHA / GitLab CI / Jenkins с full тесты, security scans, signing.
- CD: ArgoCD / Flux pull-based, или Jenkins push-based.
- Canary / blue-green deployments.
- Feature flags для rollout.
7. Cost management
Local: бесплатно (после стоимости ноутбука).
Prod:
- AWS / GCP / Azure — сотни долларов в месяц минимум для small startup.
- ECR storage costs, NAT gateway egress, k8s control plane fees.
- FinOps practice: tagging, cost-by-team, idle resource cleanup.
Production-чеклист DE-стека
Если ты возьмёшь свой capstone и захочешь deploy в prod, вот что нужно добавить:
Infrastructure
- Managed services для stateful: Postgres -> RDS, Kafka -> MSK / Confluent Cloud, ClickHouse -> Aiven / managed.
- VPC/network: private subnets, security groups, NAT gateway.
- DNS: Route53 / Cloud DNS для friendly URLs.
- TLS: всё https. Let’s Encrypt / ACM / managed cert.
Storage и backup
- Persistent storage на managed disks (EBS / Persistent Disk).
- Backups: автоматические snapshots для всех stateful сервисов.
- Restoration drills: проверь хотя бы раз в квартал, что бэкап можно восстановить.
Security
- Secrets в Vault / Secrets Manager. НЕ в env-files на disks.
- Image scanning: Trivy / Snyk в CI, fail на high/critical CVE.
- Image signing: Cosign + verification в k8s admission.
- RBAC: ServiceAccounts с minimal permissions.
- Audit logging: CloudTrail / Audit Logs.
Observability
- Metrics: Prometheus / Datadog, retention 13+ months.
- Logs: structured JSON, централизованное хранение.
- Traces: OpenTelemetry instrumentation в коде.
- Dashboards: 1 per сервис (overview), 1 per team (SLO), 1 на pipeline (DE-level).
- Alerting: SLO-based alerts, не на каждом 5xx.
- Runbooks: для каждого alert — runbook, что делать.
CI/CD
- Test pipeline: unit + integration + smoke.
- Build pipeline: multi-arch, cache, signing.
- Deploy pipeline: staging -> production, с approval.
- Rollback в один клик /
helm rollback. - Database migrations автоматизированы (Alembic / Flyway / dbt).
Operations
- On-call rotation: кто отвечает в 3 утра.
- Incident response процесс: P1 / P2 / P3.
- Post-mortem culture: после инцидента документация без blame.
- Capacity planning: monitoring of resource trends, plan ahead.
- Disaster recovery план: что если регион упал.
Этот чеклист — не “сделать всё за месяц”. Это roadmap evolution стенда от dev-toy к prod-system.
Типичные подводные камни local vs prod
Чего junior часто не ожидает:
1. Performance в prod хуже, чем локально
Локально на ноутбуке all-on-one-host — network round-trip 0.1ms, disk SSD. В prod через VPC — 1-5ms, через регион — 50-100ms. Spark-job, который локально занимает 30 секунд, в prod может работать 5 минут.
Lesson: профилируй в prod-like среде (staging) до prod-release.
2. Resource limits ломают неожиданно
Локально OOM Killer убивает Chrome или random процесс. В k8s prod, если контейнер прыгнул на 1.1GB при limit 1GB — Pod killed по OOMKilled.
Lesson: мониторь memory usage заранее, set requests/limits realistically.
3. Сетевые правила
Локально все контейнеры друг друга видят. В prod NetworkPolicies могут заблокировать legitimate traffic. Producer не может достучаться до Kafka — “connection refused” — но root cause: NetworkPolicy denies egress.
Lesson: start permissive, постепенно tighten. Логируй denied traffic.
4. Time zones
Локально на Mac TZ Europe/Moscow или UTC. В prod в US-East-1 контейнеры в UTC. Spark парсит timestamp без TZ — результаты сдвинуты.
Lesson: всё в UTC. Convert только для display.
5. Случайные локальные данные
В CI у тебя свежий Postgres, в prod — legacy data с anomalies. Тесты на pristine data проходят, prod падает на edge cases.
Lesson: integration tests на real-like data (anonymized samples), а не fixtures.
6. Latency vs throughput
Локальный producer — 10 EPS — легко обрабатывается. Prod — 10000 EPS spikes. Spark-cluster, который локально OK, в prod OOM на spike.
Lesson: load test before deploy. Используй realistic данные.
7. Logging volume
Локально DEBUG-логи — удобно. В prod 10000 RPS × 50 log lines/request = 500k log lines / sec = $$$ в Datadog.
Lesson: log levels strict. DEBUG только в local / staging.
Что взять в работу сразу
Если ты junior и сегодня вышел на работу, что применить из курса в первый месяц:
-
Подними compose-стенд для своего pipeline. Postgres + твоё приложение + что-то ещё. Один YAML, один
up -d. Team-mates скажут спасибо. -
Опиши свой код через Dockerfile. Multi-stage, USER non-root, .dockerignore.
-
Добавь healthcheck’и в compose. depends_on: condition: service_healthy.
-
Напиши integration-тесты через testcontainers. Один тест с реальным Postgres сильнее десяти моков.
-
Build & push в CI. docker/build-push-action + GHA cache.
-
README.md для каждого репо. С
make upинструкцией.
Эти шесть пунктов — сразу видимое улучшение качества команды. Будешь делать — через 6 месяцев станешь “тот человек, к которому ходят за совет по Docker”.
Куда дальше после курса
Kubernetes: следующий уровень после Docker ComposeПрямой next-step — наш [kubernetes-fundamentals]. Все compose-навыки переносятся: контейнеры, образы, сети, volumes — те же концепты, расширенные.
Параллельно изучи:
- Один cloud глубоко (AWS / GCP / Azure). Не два, один.
- Один orchestrator для workflow (Airflow / Dagster / Prefect). Не три, один.
- Один query engine (Spark / Flink / dbt). По работе.
Книги (повторяю из 18-04, но важные):
- Docker Deep Dive — если хочешь дополнительной глубины.
- Kubernetes Up & Running — next book.
- Designing Data-Intensive Applications — для DE-роли обязательно.
Pet-projects для portfolio:
- Возьми public dataset (NYC taxi, Wikipedia clicks). Построй pipeline: download -> parse -> store -> visualize. Используй compose-стек как в capstone. Push на GitHub. Это portfolio для job interviews лучше пятен сертификатов.
Заключительное слово
Контейнеры — одна из главных революций infrastructure за последние 10 лет. До них каждый deploy был snowflake — работало “у меня на машине”. Контейнеры сделали воспроизводимость нормой.
Ты теперь говоришь на этом языке. Можешь упаковать любой код, поднять любой стек, провести интеграционные тесты, deploy в registry, мониторить. Это базовый skill 2026 года.
Но контейнеры — не серебряная пуля. Distributed systems hard. Production-incidents inevitable. Junior -> middle -> senior — это путь from “знаю инструменты” к “понимаю trade-offs” к “проектирую системы под constraints”.
Curious mindset, ownership, documentation — через 3-5 лет ты не узнаешь себя. Курс закончен, но learning только начинается.
Удачи. И помни: всегда down -v в конце local-сессии. Storage free.