Контейнеры и оркестрация
Контейнер — это не «лёгкая виртуалка», а обычный процесс хоста, которому ядро выдало изолированное представление системы. Понимание этой разницы отделяет инженера, который уверенно чинит прод, от того, кто повторяет мифы про «своё ядро в каждом контейнере». Здесь мы разберём, что именно даёт изоляцию, чем образ отличается от контейнера, как собирается образ и как контейнеры общаются по сети.
Дальше — оркестрация. Один контейнер запускается командой; сотня контейнеров, переживающих падения узлов и выкаты, требует Kubernetes. Мы пройдём от одиночного контейнера до объектов Pod, Deployment и Service, и по пути назовём ловушки, на которых спотыкаются на собеседовании: обратный порядок -p host:container, роли ENTRYPOINT и CMD, стабильный IP у Service, а не у Pod.
Карта темы
- Что такое контейнер — изоляция через namespaces, лимиты через cgroups, общее ядро хоста и чем это отличается от виртуальной машины.
- Образ против контейнера — неизменяемый слоистый шаблон против запущенного экземпляра с тонким слоем для записи.
- Dockerfile — ENTRYPOINT и CMD — как собирается образ и как
ENTRYPOINTфиксирует программу, аCMDдаёт переопределяемые умолчания. - Сеть контейнеров — сеть
bridgeпо умолчанию, DNS по имени, публикация порта-pи режимhost. - Объекты Kubernetes —
Pod,DeploymentиService, и как они делят обязанности между запуском, репликацией и сетью.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
| Называть контейнер виртуальной машиной | Ожидание своего ядра и полной изоляции там, где ядро общее, а изоляция слабее |
| Считать, что записи внутри контейнера сохраняются в образ | Данные теряются при удалении контейнера; образ остаётся неизменным |
Путать роли ENTRYPOINT и CMD | Контейнер запускает не ту программу или игнорирует аргументы docker run |
Писать -p container:host вместо -p host:container | Публикуется не тот порт, сервис недоступен снаружи |
Ждать DNS по имени на дефолтной сети bridge | Имя не разрешается; связь работает только на пользовательской сети |
Думать, что стабильный IP есть у Pod | Клиенты обращаются к эфемерному адресу, который меняется при пересоздании пода |
Значение для собеседований
Контейнеры проверяют как модель мышления: понимаете ли вы, что происходит на уровне ядра, или пересказываете рекламу. Кандидат, который говорит «контейнер — это процесс с namespaces для изоляции и cgroups для лимитов, делящий ядро хоста», сразу опережает того, кто зовёт контейнер «быстрой виртуалкой».
Что обычно проверяют:
- Разницу между образом и контейнером и куда деваются записи при удалении.
- Роли
ENTRYPOINTиCMDи что переопределяют аргументыdocker run. - Как контейнеры общаются по умолчанию и как опубликовать порт.
- Что такое
Pod,Deployment,Serviceи почему стабильный адрес даёт именноService.
Типичный неверный ответ: «контейнер изолирован сильнее виртуальной машины, потому что у него своё ядро». На деле контейнер делит ядро хоста, изоляция обычно слабее, чем у ВМ, и «своего ядра» у него нет — это и есть источник и его лёгкости, и его границ безопасности.