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-компоненты, перечень различий может быть пустым, но версии и команда запуска всё равно фиксируются.