Skip to content

onepixnet/docker-guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Docker

Использование Docker позволяет создавать более надежные, масштабируемые и управляемые приложения, ускоряет процесс разработки и развертывания, и снижает вероятность возникновения проблем, связанных с конфигурацией окружения.

Преимущества использования Docker:

  1. Портабельность: Docker обеспечивает портабельность приложений. Контейнеры могут быть развернуты на любой системе, которая поддерживает Docker, что позволяет легко перемещать приложения между различными средами разработки.

  2. Изоляция: Контейнеры Docker обеспечивают изоляцию приложений и их зависимостей, что позволяет избежать конфликтов между различными компонентами системы и обеспечивает стабильность работы приложений.

  3. Управление зависимостями и унификация: Docker позволяет управлять зависимостями приложения, включая версии языков программирования, библиотек и других компонентов. Это облегчает поддержку приложения и избегание проблем совместимости.

  4. Легкость масштабирования: Docker обеспечивает легкость масштабирования приложений. С использованием Docker Compose или оркестраторов, таких как Kubernetes, можно легко создавать и масштабировать контейнеры в зависимости от изменяющихся требований к нагрузке.

  5. Быстрая разработка и развертывание: Docker позволяет быстро создавать и развертывать среды разработки и тестирования, ускоряя процесс разработки и позволяя быстрее доставлять новые функции пользователю.

  6. Использование ресурсов: Docker позволяет эффективнее использовать ресурсы хост-системы, поскольку контейнеры используют общее ядро операционной системы и могут запускаться на одном физическом сервере.

  7. Удобство управления: Docker предоставляет удобные инструменты для управления контейнерами, такие как Docker CLI, Docker Compose и различные панели управления, что упрощает процесс управления приложениями.

Использование в проекте.

Удобнее всего использовать в проекте Docker Compose. Docker Compose представляет собой инструмент для определения и управления многоконтейнерными приложениями в Docker-среде. Файл конфигурации для Docker Compose представляет собой yml файл с набором необходимых контейнеров и их настройками. Например, если нужно развернуть LEMP, то нужно указать в yml файле 3 контейнера (nginx, mysql, php).

Структура Docker в проекте.

Корень проекта (./):

docker-compose.yml - конфигурационный файл для Docker Compose

start.sh - исполняемый файл с командами для старта контейнеров с использованием Docker Compose.

.env - файл с перемнными окружения

Папка ./docker:

Эта папка содержит конфигурационные файлы для контейнеров, а также используется как хранилище для данных, если это нужно.

Примеры использования:

1. Nginx (./docker/nginx)

conf.d - папка с конфигурационными файлами nginx

logs - папка для сохранения логов, в нее приходят логи из контейнера

Dockerfile - конфигурационный файл с набором инструкций для создания контейнера

nginx.conf - общая конфигурация nginx

2. Mysql (./docker/mysql)

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/)

Примеры использования:

1. Нужно на одной машине запустить elasticsearch а на другой сам проект.

Для этого нужно создать два профиля и указать их для сервисов в docker-compose.yml. В .env указать необходимый профиль запуска.

2. На локальной машине не хватает ресурсов для запуска всех контейнеров указанных в docker-compose.yml.

В данном случае можно не запсукать контейнеры, без которых можно разрабатывать проект. Для этого нужно создать профиль запуска и указать его для сервисов которые необходимы. В .env указать этот профиль запуска.

Как добавить Docker в проект.

  1. Создать файл ./docker-compose.yml. Указать в нем необходимые сервисы и парметры для них.
  2. Создать папку ./docker. Добавить в нее папки для сервисов и в них конфигурационные файлы.
  3. Отредактировать Dockerfile для каждого сервиса, где он используется.
  4. Создать ./start.sh с командами для запуска.
  5. В .env указать параметры (COMPOSE_PROFILES, USER, GROUP), изменить хосты сервисов.

Особенности использования Docker с Laravel.

Для запуска проекта недостаточно просто запустить контейнеры. Также необходимо установить зависимости, накатить миграции, запустить воркеры и др. Для этого можно использовать файл с командами которые необходимо выполнить после запуска контейнера.

Пример ./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 есть готовые конфигурационные файлы. Их можно использовать.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published