Учебный конструктор · контейнеры и оркестрация
Docker, Compose и Kubernetes — как это устроено
Слышал про «контейнеры», «поды», «деплойменты», но в голове каша? Собери картину из блоков. Три режима — от простого к сложному: один контейнер (Docker), связка сервисов (Compose) и целый кластер (Kubernetes). Кликай блоки — узнаешь, зачем каждый, а выключив любой — увидишь, что сломается. Запусти команду — и проследи, как запрос бежит сквозь компоненты.
Незнакомы слова (образ, namespaces, Pod, оркестрация…)? → словарь простыми словами внизу. Контейнер работает поверх ядра ОС → разбери архитектуру ОС.
🐳 Docker. Контейнер — это не «лёгкая виртуалка», а обычный процесс Linux, которому ядро через namespaces и cgroups показало урезанный мир: свою файловую систему, свою сеть, свой лимит памяти. Образ — это неизменяемый «слепок» файлов, из которого контейнер запускается за миллисекунды.
FROM node:20-alpine # базовый слой: ОС + Node
WORKDIR /app
COPY package*.json ./ # сначала зависимости — кэшируется
RUN npm ci --omit=dev # слой с node_modules
COPY . . # слой с кодом приложения
EXPOSE 3000 # какой порт слушает
CMD ["node", "server.js"] # чем запускаться- FROM
- — базовый образ — нижний слой, переиспользуется между сборками
- COPY до RUN npm
- — трюк кэша: зависимости меняются редко → слой не пересобирается при правке кода
- EXPOSE
- — документирует порт; наружу публикует уже docker run -p
- CMD
- — команда запуска контейнера (можно переопределить при run)
📖 Словарь: простыми словами
Встретил незнакомое слово выше — найди его здесь. Коротко — суть; разверни — подробное объяснение с аналогией.
Контейнеризолированный процесс с собственным видом файлов/сети и лимитом ресурсов
Не виртуальная машина, а обычный процесс Linux, которому ядро через namespaces показало урезанный мир, а через cgroups ограничило ресурсы. Поэтому запускается за миллисекунды и почти не ест лишнего — в отличие от ВМ с целой гостевой ОС.
Образ (image)неизменяемый слепок файлов, из которого запускается контейнер
Состоит из слоёв (по инструкции Dockerfile). Собирается один раз, хранится в реестре, запускается сколько угодно раз. Один образ → много одинаковых контейнеров.
Слой (layer)неизменяемый набор изменений ФС; слои кэшируются и переиспользуются
Каждая инструкция Dockerfile добавляет слой. Общий базовый слой хранится один раз на много образов; при пересборке меняются только верхние слои — отсюда скорость и экономия.
Namespacesмеханизм ядра: контейнер видит «свои» процессы, сеть, файлы
Linux-namespaces изолируют то, что видит процесс: список процессов (PID), сетевые интерфейсы (net), точки монтирования (mnt) и т.д. Именно поэтому внутри контейнера он «один в системе».
cgroupsлимиты ресурсов: сколько CPU, памяти и I/O можно процессу
Control groups — механизм ядра, ограничивающий и учитывающий потребление ресурсов. Без него контейнер мог бы съесть весь хост. Namespaces дают изоляцию видимости, cgroups — изоляцию ресурсов.
Том (volume)постоянное хранилище, переживающее пересоздание контейнера
Контейнеры эфемерны: удаляются и создаются заново. Данные (БД, загрузки) хранят в томах — отдельно от одноразового слоя контейнера. Принцип: состояние отдельно от вычисления.
Реестр (registry)хранилище образов (Docker Hub, приватный): push/pull
Связывает место сборки и место запуска: собрал образ → push в реестр → на сервере pull и run. Без реестра образ живёт только на твоей машине.
Docker Composeописание связки сервисов в одном YAML и запуск одной командой
Реальное приложение — несколько контейнеров (веб+БД+кэш). Compose описывает их в docker-compose.yml: образы, порты, тома, сети, зависимости — и поднимает весь стек командой `docker compose up`.
Оркестрацияавтоматическое управление множеством контейнеров на многих машинах
Когда контейнеров и хостов много, нужен «автопилот»: размещать, перезапускать упавшие, масштабировать, обновлять без простоя. Этим занимается Kubernetes (и подобные).
Podминимальная единица k8s: один или несколько контейнеров вместе
Kubernetes управляет не контейнерами напрямую, а Pod-ами. Контейнеры в одном Pod делят сеть и тома и живут вместе. Pod эфемерен — его не чинят, а пересоздают.
Deploymentдекларация «хочу N реплик такой версии» с плавными обновлениями
Управляет ReplicaSet-ами: держит нужное число Pod-ов, плавно катит новые версии (rolling update) и откатывает при сбое. Ты описываешь желаемое — кластер сам добивается его.
Serviceстабильный адрес и балансировка поверх меняющихся Pod-ов
Pod-ы приходят и уходят с разными IP. Service даёт один постоянный адрес и распределяет трафик между живыми Pod-ами по их меткам. Принцип: стабильный фасад над эфемерным набором.
Control plane / Nodeуправляющий слой (мозг) и рабочие узлы (мышцы) кластера
Control plane (apiserver, etcd, scheduler, controller-manager) принимает решения и хранит состояние. Worker-узлы (kubelet, kube-proxy, runtime) реально запускают контейнеры по этим решениям.
Желаемое состояние (declarative)описываешь ЧТО хочешь, система сама добивается этого
Ключевая идея k8s: вместо команд «сделай шаг 1, 2, 3» ты декларируешь итог («3 реплики версии 1.4»). Контроллеры в цикле сверки (reconcile loop) постоянно подгоняют реальность под желаемое.
Дальше по теме
Эти инструменты связаны с текущим — так задачи стыкуются на практике.
Все инструменты — в каталоге.