Перейти к содержанию

Docker Compose

Требования применяются к local и удалённым целям с runtime Docker Compose. Уровни обязательности определены в корневом README.md.

INF-CMP-001. Явный профиль Compose

Уровень: MUST

Применяется к: каждой Compose-цели

Manifest должен объявлять Compose runtime и среду. Production Compose должен использовать профиль single-instance, выполнять INF-MAN-005 и ссылаться на доказательства ёмкости по INF-RES-001, ограничения доступности по INF-RES-006, владельца host, backup и runbook восстановления. Compose-цель не должна заявлять high-availability.

Обоснование

Compose не предоставляет кластерные гарантии Kubernetes и не должен неявно считаться HA.

Проверка

  • валидация manifest;
  • review production risk и recovery rehearsal.

Исключения

Compose production не может заявлять high-availability.

INF-CMP-002. Воспроизводимый запуск

Уровень: MUST

Применяется к: Compose-проекту

Репозиторий должен содержать Compose-файл, пример несекретной конфигурации, healthchecks, named volumes и одну документированную команду запуска и остановки. Image для non-production и production должен использовать release identifier из явно объявленного container registry. Выбор registry регулируется INF-SEC-014, а использование digest — INF-ART-002. Версия Docker Engine/Compose и поддерживаемые архитектуры host должны быть указаны диапазоном или проверяться preflight.

Обоснование

Локальные ручные шаги делают окружение невоспроизводимым.

Проверка

  • запуск из чистого checkout по документации;
  • docker compose config и проверка release identifier.

Исключения

Local MAY собирать image из явно указанного build context.

INF-CMP-003. Изоляция и публикация портов

Уровень: MUST

Применяется к: Compose service

Внутренние зависимости должны находиться в отдельной Compose network и не публиковать порты на host без необходимости. Local-порты по умолчанию должны привязываться к loopback. Production endpoint должен использовать управляемый reverse proxy и TLS.

Обоснование

Публикация на всех интерфейсах расширяет доступ к служебным сервисам.

Проверка

  • инспекция docker compose config и listening sockets;
  • сетевой тест с внешнего host.

Исключения

Явно внешний сервис MAY публиковать требуемый порт.

INF-CMP-004. Секреты и данные

Уровень: MUST

Применяется к: Compose service

Секрет не должен иметь значение в Compose-файле или committed .env. Данные, которые должны пережить пересоздание container, должны находиться в named volume или внешнем storage и покрываться применимым backup. Файл, временно созданный из GitLab Variable, должен иметь минимальные filesystem permissions и удаляться после deployment; Compose secret не должен считаться шифрованием at rest на host.

Обоснование

Container filesystem является одноразовым, а .env часто попадает в Git.

Проверка

  • пересоздание containers с проверкой данных;
  • secret scan и инспекция mounts.

Исключения

Одноразовые local-данные MAY удаляться при docker compose down --volumes.

INF-CMP-005. GitLab Runner для удалённой цели

Уровень: MUST

Применяется к: deployment Compose через GitLab CI

Runner должен быть защищённым, выделенным для доверенных проектов и иметь минимальный доступ к целевому Docker host. Production job должен использовать protected environment. Общий незащищённый Docker socket runner запрещён.

Обоснование

Доступ к Docker socket эквивалентен административному доступу к host.

Проверка

  • review runner protection, tags и project assignment;
  • негативный запуск из незащищённой ветки.

Исключения

Не допускаются.

INF-CMP-006. Local-данные и credentials

Уровень: MUST

Применяется к: local Compose-цели

Цель должна выполнять общую изоляцию данных и credentials по INF-SEC-012. По умолчанию Compose должен использовать синтетические seed-данные и локальные credentials; команды reset и повторной инициализации local state должны быть документированы.

Обоснование

Упрощённый локальный стек не должен создавать канал утечки production-данных.

Проверка

  • запуск из чистого checkout без корпоративных production credentials;
  • reset и повторный seed;
  • проверка происхождения тестовых данных.

Исключения

Диагностика production выполняется отдельным контролируемым процессом, а не через local-профиль.

INF-CMP-007. Production Docker host

Уровень: MUST

Применяется к: production Compose-цели

Docker host должен иметь владельца, поддерживаемую версию ОС и Docker Engine, автоматический запуск Docker после reboot, firewall, синхронизацию времени, мониторинг CPU/memory/disk/inodes, ограниченный административный доступ и проверенный backup host-level configuration. Docker API не должен быть доступен по незащищённой сети.

Обоснование

В Compose один host является платформой и единым отказным доменом приложения.

Проверка

  • host baseline review;
  • reboot/recovery rehearsal;
  • сетевой тест Docker API и alert заполнения диска.

Исключения

Не допускаются.

INF-CMP-008. Restart и журналирование

Уровень: MUST

Применяется к: удалённой Compose-цели

Долгоживущий service должен иметь явную restart policy и healthcheck. Docker logs должны иметь численную rotation по размеру/числу файлов либо отправляться в Vector с ограниченным локальным buffer. Restart loop и unhealthy state должны наблюдаться и создавать alert для production.

Обоснование

Неограниченный json log заполняет host, а бесконечный restart скрывает отказ.

Проверка

  • генерация log до rotation;
  • crash loop и unhealthy test;
  • reboot host.

Исключения

Одноразовый migration/job service не должен автоматически перезапускаться после успешного завершения.

INF-CMP-009. Ресурсные границы

Уровень: MUST

Применяется к: удалённой Compose-цели

Каждый service должен иметь memory limit, обоснованную CPU-границу и достаточный резерв host для Docker daemon, reverse proxy и recovery. Предел числа процессов и read-only filesystem должны применяться, если service не требует иного; writable paths должны быть перечислены mounts/tmpfs.

Обоснование

Один container не должен исчерпать весь single-host runtime.

Проверка

  • docker compose config и runtime inspect;
  • memory/process exhaustion test;
  • измерение резерва host.

Исключения

Отказ от CPU limit допустим при CPU request отсутствующем в Compose, если нагрузочная модель подтверждает совместное размещение и есть alert насыщения.

INF-CMP-010. Упрощённый локальный стек

Уровень: MUST

Применяется к: local Compose-цели, заменяющей или исключающей production компоненты

Документация должна перечислять исключённые и заменённые компоненты, различия гарантий и сценарии, которые локально не проверяются. Замена должна сохранять используемый приложением протокол и обязательный контракт либо явно требовать отдельной integration-среды. Опциональные тяжёлые зависимости должны включаться именованными Compose profiles, не меняя базовую команду запуска.

Обоснование

Упрощённый стек полезен для разработки, но не должен создавать ложное доказательство production-совместимости.

Проверка

  • запуск минимального и каждого именованного profile;
  • сопоставление endpoint/протокола с production;
  • проверка перечня непокрытых integration-сценариев.

Исключения

Если local полностью повторяет production-компоненты, перечень различий может быть пустым, но версии и команда запуска всё равно фиксируются.