17 вопросов
Платформа контейнеризации: приложение и зависимости упакованы в образ; контейнер - изолированный процесс. Единообразие окружения (dev/prod), быстрый деплой, масштабирование. Не виртуализация - общее ядро ОС.
Image - неизменяемый шаблон (слои). Container - запущенный экземпляр образа с writable layer. Один образ - много контейнеров. Контейнер при удалении теряет изменения в своем слое.
Каждая инструкция в Dockerfile создает слой. Слои кешируются; при пересборке переиспользуются до первой измененной инструкции. Порядок важен: реже меняемое - выше. COPY зависимостей отдельно от кода.
Несколько этапов (FROM) в одном Dockerfile: сборка в одном образе, вывод артефакта в другой (меньший) образ. Итоговый образ без компиляторов и мусора. Уменьшение размера и поверхности атаки.
Оркестрация нескольких контейнеров: один YAML (сервисы, сети, тома). Запуск docker-compose up. Удобно для локальной разработки и тестов. Не заменяет оркестратор (K8s) для продакшена.
Оркестратор контейнеров: деплой, масштабирование, самоисцеление. Pod - минимальная единица (один или несколько контейнеров). Deployment - желаемое состояние. Service - сетевой доступ к подам. ReplicaSet - количество реплик.
Pod - группа контейнеров с общим сетью/томом. Deployment - декларативное управление репликами подов, rolling update. Service - стабильный endpoint и балансировка к подам (ClusterIP, NodePort, LoadBalancer).
livenessProbe - жив ли контейнер (перезапуск при падении). readinessProbe - готов ли принимать трафик (исключение из Service при неготовности). startupProbe - для медленного старта. HTTP, TCP или command.
Continuous Integration - автоматическая сборка и тесты при коммите. Continuous Delivery/Deployment - автоматическая доставка до prod (или до ручного деплоя). Pipeline: build, test, artifact, deploy. Инструменты: GitHub Actions, GitLab CI, Jenkins.
Blue-green: два одинаковых окружения; переключение трафика с одного на другое. Быстрый откат. Canary: новая версия получает малый процент трафика, затем увеличение. Меньше риска, постепенный раскат.
Включение функциональности без деплоя кода. Флаг в конфиге или сервисе; код проверяет флаг. Постепенный раскат, A/B тесты, откат без релиза. Реализация: в БД, LaunchDarkly, Unleashed.
Infrastructure as Code - описание инфраструктуры в коде (Terraform, Pulumi, CloudFormation). Версионирование, повторяемость, документирование. Декларативный или императивный подход.
Метрики (Prometheus, Grafana), логи (ELK, Loki), трейсинг (Jaeger). Алерты при порогах. Health checks и readiness. Сбор метрик с приложения (экспортеры, SDK).
proxy_pass на бэкенд; proxy_set_header Host, X-Real-IP, X-Forwarded-For/Proto; буферы и таймауты. Балансировка upstream. SSL termination. Кеширование и статика.
Сбор логов с приложений и сервисов в одно хранилище (ELK, Loki, облачные сервисы). Структурированные логи (JSON); уровни; корреляция по request id. Ротация и хранение.
Инструменты без запуска кода: линтеры (PHP_CodeSniffer, ESLint), анализ типов (Psalm, PHPStan), поиск уязвимостей (SAST). Интеграция в CI. Раннее обнаружение ошибок и запахов.
Единый стиль: PHP-CS-Fixer, Prettier, Black. Конфиг в репозитории; автоматическое применение в pre-commit или CI. Меньше шума в code review, читаемость.