Деплой #
1. CI/CD #
CI/CD (Continuous Integration / Continuous Delivery) — это набор практик и инструментов для автоматизации интеграции кода и доставки приложений:
- CI (Continuous Integration): Автоматическое тестирование и интеграция кода в общую ветку. После каждого коммита запускаются тесты, сборка.
- CD (Continuous Delivery): Автоматизация процесса доставки приложений на различные среды (dev, staging, production) после успешного тестирования.
2. Как работает Docker. Из чего состоит докер образ? #
Docker-образ состоит из:
- Базового слоя (например, alpine, ubuntu).
- Набора слоёв файловой системы, которые включают установленные пакеты, зависимости и конфигурации.
- Манифеста (метаданных) образа, описывающих его слои и зависимости.
3. Что такое слой? Как мы можем создать новый слой? #
Слой — это промежуточный этап, создаваемый при выполнении каждой команды в Dockerfile (RUN
, COPY
, ADD
). Каждый слой является неизменяемым, а Docker использует кэш для уже созданных слоёв.
- Новый слой создается при выполнении команды в Dockerfile. Например, каждая команда
RUN apt-get install ...
добавляет новый слой.
4. Docker compose #
Docker Compose — это инструмент для запуска и управления несколькими Docker-контейнерами, описанными в одном файле docker-compose.yml
. Он позволяет легко управлять зависимыми сервисами (например, веб-сервер, база данных) в одном окружении.
Разница между Docker File и Docker Compose
Dockerfile и Docker Compose — это инструменты Docker, но они служат для разных задач:
Dockerfile
- Это файл, где вы описываете, как собрать образ (шаблон) контейнера.
- С его помощью можно указать, какие программы устанавливать, какие файлы добавлять и какую команду запускать при старте контейнера.
- Применяется для создания одного образа.
- Пример:
Вы хотите запустить приложение на Java. В Dockerfile вы указываете, чтобы скачивалась нужная версия JDK, копировался ваш код и запускалось приложение.
Docker Compose
- Это инструмент для управления несколькими контейнерами. Он не создает образы, а работает с уже готовыми.
- В файле
docker-compose.yml
вы описываете, как разные контейнеры будут взаимодействовать: какие порты открыть, какие сети использовать, какие данные хранить. - Применяется для оркестрации нескольких сервисов.
- Пример:
Ваше приложение на Java использует базу данных. В Compose вы описываете, чтобы одновременно запускались контейнеры с приложением и с базой данных, а также настраиваете их соединение.
Ключевая разница:
- Dockerfile нужен для создания образа одного контейнера.
- Docker Compose — для управления и запуска нескольких связанных контейнеров.
5. ARG, ENV. В чем отличия? #
- ARG: Параметры, которые передаются во время сборки образа. Доступны только во время создания Docker-образа и не сохраняются в контейнере.
- ENV: Переменные окружения, которые задаются в контейнере и могут быть использованы приложениями, запущенными в контейнере.
6. Docker cmd vs entrypoint #
- CMD: Определяет команду по умолчанию, которая выполняется при запуске контейнера. Может быть переопределена при запуске.
- ENTRYPOINT: Указывает фиксированную команду, которая всегда будет выполняться. Аргументы могут быть переданы через
CMD
или командную строку.
7. Отличия контейнеризации от виртулизации #
- Контейнеризация: Разделение приложений на уровне операционной системы. Контейнеры используют одно ядро ОС и изолируются друг от друга.
- Виртуализация: Полная эмуляция аппаратного обеспечения. Каждый виртуальный сервер работает на собственной копии операционной системы.
8. Поддержка сервиса в продакшене, мониторинг его работы. Общие подходы? #
Поддержка сервиса в продакшене включает в себя обеспечение его доступности, производительности и надежности.
Общие подходы:
Мониторинг и логирование:
- Используйте инструменты мониторинга:
- Prometheus: Сбор метрик.
- Grafana: Визуализация метрик.
- ELK Stack (Elasticsearch, Logstash, Kibana): Анализ и хранение логов.
- Datadog / New Relic: Для полного мониторинга приложения и инфраструктуры.
- Настройте логирование:
- Сохраняйте логи в централизованной системе.
- Подключите алерты на аномалии (ошибки, снижение производительности).
- Используйте инструменты мониторинга:
Анализ производительности:
- Используйте APM-инструменты (Application Performance Monitoring):
- Определение медленных запросов или узких мест.
- Анализируйте метрики CPU, памяти, I/O, использования сети.
- Используйте APM-инструменты (Application Performance Monitoring):
Управление отказами:
- Настройте систему алертов (например, через PagerDuty).
- Автоматизируйте перезапуск сервисов с помощью Docker Restart Policies или Kubernetes Deployment Strategies.
Планы восстановления:
- Настройте резервное копирование (базы данных, конфигураций).
- Разработайте сценарии восстановления после сбоев.
Масштабируемость:
- Горизонтальное масштабирование с помощью Kubernetes, Docker Swarm или облачных решений (AWS ECS, Azure AKS, Google GKE).
- Используйте автоскейлинг для добавления ресурсов в моменты пиковых нагрузок.
Интеграция CI/CD:
- Автоматическое развертывание обновлений с предварительным тестированием.
- Настройка этапов отката (rollback) в случае неудачи.
Health Checks:
- Настройте проверки работоспособности сервиса (например, HTTP
/health
endpoint). - Используйте встроенные механизмы Docker или Kubernetes для мониторинга контейнеров.
- Настройте проверки работоспособности сервиса (например, HTTP
Пример мониторинга сервиса
Мониторинг метрик:
- Настройка Prometheus для сбора данных о запросах, загрузке CPU и использовании памяти.
- Визуализация дашбордов в Grafana.
Логирование:
- Логи сервисов собираются через Fluentd или Filebeat и передаются в Elasticsearch.
Алерты:
- Настройка оповещений через Slack или PagerDuty для уведомлений при отказах или аномалиях.
Проверки здоровья:
- Добавление
/health
endpoint, возвращающего статус 200, если сервис работает корректно.
- Добавление