Использование Docker позволяет создавать более надежные, масштабируемые и управляемые приложения, ускоряет процесс разработки и развертывания, и снижает вероятность возникновения проблем, связанных с конфигурацией окружения.
-
Портабельность: Docker обеспечивает портабельность приложений. Контейнеры могут быть развернуты на любой системе, которая поддерживает Docker, что позволяет легко перемещать приложения между различными средами разработки.
-
Изоляция: Контейнеры Docker обеспечивают изоляцию приложений и их зависимостей, что позволяет избежать конфликтов между различными компонентами системы и обеспечивает стабильность работы приложений.
-
Управление зависимостями и унификация: Docker позволяет управлять зависимостями приложения, включая версии языков программирования, библиотек и других компонентов. Это облегчает поддержку приложения и избегание проблем совместимости.
-
Легкость масштабирования: Docker обеспечивает легкость масштабирования приложений. С использованием Docker Compose или оркестраторов, таких как Kubernetes, можно легко создавать и масштабировать контейнеры в зависимости от изменяющихся требований к нагрузке.
-
Быстрая разработка и развертывание: Docker позволяет быстро создавать и развертывать среды разработки и тестирования, ускоряя процесс разработки и позволяя быстрее доставлять новые функции пользователю.
-
Использование ресурсов: Docker позволяет эффективнее использовать ресурсы хост-системы, поскольку контейнеры используют общее ядро операционной системы и могут запускаться на одном физическом сервере.
-
Удобство управления: Docker предоставляет удобные инструменты для управления контейнерами, такие как Docker CLI, Docker Compose и различные панели управления, что упрощает процесс управления приложениями.
Удобнее всего использовать в проекте Docker Compose. Docker Compose представляет собой инструмент для определения и управления многоконтейнерными приложениями в Docker-среде. Файл конфигурации для Docker Compose представляет собой yml файл с набором необходимых контейнеров и их настройками. Например, если нужно развернуть LEMP, то нужно указать в yml файле 3 контейнера (nginx, mysql, php).
docker-compose.yml - конфигурационный файл для Docker Compose
start.sh - исполняемый файл с командами для старта контейнеров с использованием Docker Compose.
.env - файл с перемнными окружения
Эта папка содержит конфигурационные файлы для контейнеров, а также используется как хранилище для данных, если это нужно.
conf.d - папка с конфигурационными файлами nginx
logs - папка для сохранения логов, в нее приходят логи из контейнера
Dockerfile - конфигурационный файл с набором инструкций для создания контейнера
nginx.conf - общая конфигурация nginx
run - папка для хранения файлов базы данных (создается автоматически если указана в docker-compose.yml)
Файл .env можно использовать не только для задания переменных окружения для проекта, но и для Docker.
Требуется запустить контейнер с базой данных, например mysql. Для того чтобы не указывать в нескольких местах доступы для нее, их можно указать в .env и использовать как в проекте так и в контейнере. Для контейнера они указываются в docker-compose.yml. Пример есть в ./backend/.env, ./backend/docker-compose.yml.
Также для Docker можно использовать отдельный файл .env если в этом есть необходимость. (https://docs.docker.com/compose/environment-variables/set-environment-variables/)
В docker-compose.yml можно указать разные профили при которых будут запущены контейнеры. Сам профиль запуска можно указать в .env. (https://docs.docker.com/compose/profiles/)
Для этого нужно создать два профиля и указать их для сервисов в docker-compose.yml. В .env указать необходимый профиль запуска.
2. На локальной машине не хватает ресурсов для запуска всех контейнеров указанных в docker-compose.yml.
В данном случае можно не запсукать контейнеры, без которых можно разрабатывать проект. Для этого нужно создать профиль запуска и указать его для сервисов которые необходимы. В .env указать этот профиль запуска.
- Создать файл ./docker-compose.yml. Указать в нем необходимые сервисы и парметры для них.
- Создать папку ./docker. Добавить в нее папки для сервисов и в них конфигурационные файлы.
- Отредактировать Dockerfile для каждого сервиса, где он используется.
- Создать ./start.sh с командами для запуска.
- В .env указать параметры (COMPOSE_PROFILES, USER, GROUP), изменить хосты сервисов.
Для запуска проекта недостаточно просто запустить контейнеры. Также необходимо установить зависимости, накатить миграции, запустить воркеры и др. Для этого можно использовать файл с командами которые необходимо выполнить после запуска контейнера.
Пример ./backend/docker/php/run.sh - файл с командами (указывается в ./backend/docker/php/Dockerfile).
Также команды можно выполнять вручную через docker-compose (docker compose) из папки с проектом.
Пример docker-compose exec php composer install где php - имя сервиса, указанное в docker-compose.yml composer install - выполняемая команда
Для запуска воркеров рекомендуется использовать отдельный контейнер с супервизором. Потому что иногда возникают ситуации, когда запущенный процесс останавливается, например из-за ошибки в скрипте. Пример есть в /backend/docker/supervisor
В папках ./backend и ./frontend есть готовые конфигурационные файлы. Их можно использовать.