Главная/Ограничения Docker/Обзор

Раздел 19. Ограничения Docker

Курс из восемнадцати разделов, объясняющих, как пользоваться инструментом, обязан закончиться разделом о том, когда им пользоваться не нужно. Без этого обучение даёт не инженера, а сторонника технологии.

Docker решает конкретный набор задач: воспроизводимость окружения, изоляция процессов, единообразие доставки. Он не решает — и не должен решать — задачи архитектуры приложения, управления конфигурацией, оркестрации и безопасности многопользовательских систем. Попытки применить его вне области применимости дают предсказуемый результат: сложность растёт, выгода не появляется.

Раздел собирает эти случаи, объясняет механизм каждого и завершается каталогом из шестидесяти двух антипаттернов — с объяснением, почему каждый выглядит разумным и чем оборачивается.

Цели обучения

После раздела учащийся сможет:

  • назвать ситуации, где контейнеризация увеличивает сложность без соразмерной выгоды;
  • объяснить, почему изоляция containers недостаточна для недоверенного кода;
  • объяснить сложности с persistent state и почему база данных в container — отдельное решение, а не умолчание;
  • назвать, что становится сложнее в отладке, и какие требования это накладывает на observability;
  • объяснить, почему containers не заменяют virtual machines, configuration management и orchestration;
  • сформулировать, почему контейнеризация не исправляет архитектурные проблемы приложения;
  • аргументированно отказаться от контейнеризации в конкретном случае;
  • распознавать антипаттерны в чужих конфигурациях и называть их последствия.

Предварительные знания

Материалы

  1. Где containers усложняют систему
    Дополнительный слой абстракции и его цена. Усложнение отладки: новый уровень между кодом и системой. Persistent state и почему он противоречит модели эфемерности. Производительность: сеть, файловая система, GPU и специализированное оборудование. Стоимость поддержки инфраструктуры сборки. Случаи, где обычный systemd-сервис проще и надёжнее.

  2. Границы изоляции
    Общий kernel как фундаментальное ограничение. Что означает container escape и почему такие уязвимости появляются регулярно. Недоверенный код: почему containers для него недостаточны и что применяют вместо. Многопользовательские сценарии. Побочные каналы. Когда нужна VM, а когда — отдельная машина.

  3. Когда Docker применять не следует
    Систематизированный список: приложения с интенсивным вводом-выводом и жёсткими требованиями к задержкам, десктопные приложения с GUI, задачи, требующие прямого доступа к оборудованию, однократные скрипты, простые статические сайты, окружения, где команда не готова поддерживать инфраструктуру, системы с жёсткими требованиями сертификации. Для каждого случая — механизм и альтернатива.

  4. Каталог антипаттернов
    Шестьдесят два антипаттерна с единой структурой: описание, почему выглядит разумным, чем оборачивается, как правильно. Сгруппированы по темам: сборка образов, запуск и lifecycle, данные, сеть, конфигурация и секреты, Compose, эксплуатация, организационные. Полная версия каталога также доступна как справочник.

  5. Практические задания
    Аналитические задания раздела.

Рекомендуемый порядок чтения

Последовательный: 01 → 02 → 03 → 04 → exercises.

Урок 04 — справочный. Прочитайте целиком один раз, затем используйте как чек-лист при ревью чужих конфигураций.

Практические задания

ЗаданиеТип
1Проверить собственный проект по каталогу антипаттернов и составить список найденногообяз.
2Для трёх найденных антипаттернов написать обоснование исправления с оценкой рискаобяз.
3Взять задачу из своей практики и аргументированно решить, нужна ли контейнеризацияобяз.
4Сформулировать, какие требования к observability добавляет переход в containersдоп.
5Описать сценарий, где контейнеризация базы данных оправдана, и сценарий, где нетдоп.
6Провести ревью чужого репозитория и написать отчёт с приоритизацией находок

Полные формулировки — в exercises.md.

Критерии завершения раздела

Раздел пройден, когда учащийся может без подсказок:

  1. Назвать три ситуации, где контейнеризация ухудшает систему, и объяснить механизм каждой.
  2. Объяснить, почему containers недостаточны для запуска недоверенного кода.
  3. Аргументированно ответить на предложение «давайте всё завернём в Docker».
  4. Найти в чужом репозитории пять антипаттернов и объяснить последствия каждого.
  5. Сформулировать условия, при которых он рекомендовал бы отказаться от Docker в конкретном проекте.

Проверьте себя: Quiz 19.

Что дальше

Это последний раздел курса. Дальше:

Навигация

← Предыдущий раздел: Docker и Kubernetes
Вернуться к главному оглавлению
Далее: Справочники →

Markdown на GitHub ↗