Инструкция по настройке Laravel, Nginx и MySQL с помощью Docker Compose

Что такое контейнеризация

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

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

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

Далее будет рассказано о том, как выполнить настройку контейнеризации при помощи стека LEMP (Linux, Nginx, MySQL и PHP). Для этого потребуется установка Laravel.

Установка Laravel

Laravel – это фреймворк для веб-приложений, который распространяется бесплатно. Он предоставляет удобные инструменты для создания высокопроизводительных и масштабируемых приложений с использованием современных подходов. Чтобы установить Laravel, выполните следующие шаги:

  1. Установите Composer, он необходим для управления зависимостями Laravel. Введите команду:

composer global require laravel/installer

  1. После завершения установки выполните:

laravel new project

Где project – имя вашего нового проекта.

  1. Когда установка Laravel завершится, будет создана структура проекта. Вы можете перейти в папку проекта, выполнив команду:

cd project

  1. Для запуска веб-сервера разработки Laravel:

php artisan serve

Чтобы открыть проект в браузере, перейдите по адресу http://localhost:8000. Теперь у вас есть установленный и работающий проект Laravel.

После установки Laravel важно сгенерировать ключ APP_KEY – ключ шифрования сессий и кук. Он представляет собой случайную строку из 32 символов и находится в файле .env. Если установка Laravel выполнена при помощи Composer, то ключ приложения Laravel сгенерирован автоматически.

Для чего нужен инструмент Docker Compose

Docker Compose – это инструмент, который позволяет запускать многоконтейнерные приложения в Docker. Он используется для описания конфигурации нескольких контейнеров в одном файле, который называется docker-compose.yml. Docker Compose позволяет быстро развернуть и масштабировать приложения с несколькими контейнерами.

Почему используют Docker Compose:

  1. Инструмент позволяет настроить несколько контейнеров в одном файле и упростить их управление. Особенно удобно, если ваше приложение зависит от нескольких сервисов, баз данных или инфраструктурных компонентов, работающих в отдельных контейнерах.
  2. Удобная конфигурация контейнеров. В файле Docker Compose вы можете определить параметры и настройки для каждого контейнера, такие как порты, переменные окружения, тома и сети.
  3. С использованием Docker Compose можно легко запустить все контейнеры вашего приложения одной командой. Это облегчает и упрощает процесс развертывания вашего приложения, особенно на разных окружениях.
  4. Docker Compose предоставляет инструменты для масштабирования и управления контейнерами вашего приложения. Вы можете легко задать количество экземпляров каждого контейнера и настроить сетевое взаимодействие между контейнерами для создания сложных системных архитектур.

Для чего необходимо создание Dockerfile

Dockerfile – это текстовый файл, содержащий инструкции для построения образа Docker. Он определяет какой базовый образ следует использовать, как установить зависимости, как скопировать файлы в образ, как настроить окружение и многое другое.

Почему создание Dockerfile является важным:

  1. Dockerfile позволяет описать все шаги и зависимости, необходимые для создания полностью функционального образа Docker. Это обеспечивает автоматическую воспроизводимость при создании образа на разных системах и окружениях.
  2. Dockerfile может быть включен в ваш репозиторий или сопровождаться вашим приложением в качестве кода. Он выполняет роль документации для вашего образа Docker и помогает предоставить четкие инструкции по настройке вашего окружения и запуску приложения.
  3. Dockerfile помогает оптимизировать размер образа Docker. Вы можете указать только необходимые зависимости, файлы и настройки, чтобы минимизировать размер образа и ускорить процесс загрузки и развертывания.

Ниже представлена инструкция как создать Dockerfile:

  1. В корневом каталоге вашего проекта создайте новый файл с именем “Dockerfile” (без расширения).
  2. Добавьте в Dockerfile первую инструкцию, определяющую базовый образ, на ней будет основан ваш образ Docker. Например, если вы хотите создать образ на основе образа Ubuntu, укажите следующую строку:

FROM ubuntu:latest

  1. Определите рабочую директорию для контейнера. Вы можете использовать оператор WORKDIR для этого. Например, для установки рабочей директории в /app, укажите следующую строку:

WORKDIR /app

  1. Скопируйте файлы в контейнер, используя оператор COPY. Например, если у вас есть файл index.html в текущем каталоге, который вы хотите копировать в контейнер в /app, укажите:

COPY index.html /app

  1. Установите необходимые зависимости и выполните другие инструкции, необходимые для настройки окружения внутри контейнера.
  2. Определите команду, которую Docker будет выполнять при запуске контейнера. Используйте оператор CMD для этого. Например, для запуска команды python server.py, укажите следующую строку:

CMD python server.py

  1. Сохраните файл Dockerfile и соберите образ Docker с помощью команды docker build. Укажите путь к каталогу, содержащему Dockerfile, и укажите тег для нового образа. Например:

docker build -t myimage:latest

Вы можете запустить контейнер с помощью команды docker run, используя тег образа:

docker run myimage:latest

Используйте другие инструкции при настройке Dockerfile. Основные из них приведены на ниже:

Настройка служб: MySQL, Nginx, PHP

Перейдем к настройке MySQL, Nginx и PHP с помощью Docker Compose.

Настройка MySQL

  1. Создайте файл docker-compose.yml и определите в нем сервис для MySQL. Например:

version: '3.7'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      ports:
        - "3306:3306"

С помощью данной конфигурации создается сервис с именем "db" и используется образ MySQL версии 5.7. Также определяется переменные окружения для настройки пароля для root-пользователя, создания базы данных и создание пользователя MySQL. Пробрасывается порт 3306, который используется для подключения к MySQL.

  1. Следующий шаг – запуск контейнеров в фоновом режиме с помощью команды:

$ docker-compose up -d

  1. Проверьте статус контейнеров:

$ docker-compose ps

Эта команда покажет список всех запущенных контейнеров и их статус.

  1. Подключитесь к MySQL с помощью любого клиента MySQL, используя имя хоста и порт, определенные в файле docker-compose.yml:

$ mysql -h localhost -P 3306 -u user -p

Теперь вы можете использовать MySQL в своем приложении, подключившись к нему через порт 3306 на локальной машине.

Настройка Nginx

  1. Создайте файл docker-compose.yml и определить в нем сервис для Nginx. Например:

version: '3.7'
services:
  nginx:
  image: nginx:latest
  restart: always
  ports:
    - "80:80"
  volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf
    - ./html:/usr/share/nginx/html

В данном примере создается сервис с именем "nginx" и используется образ Nginx. Пробрасывается порт 80, который используется для доступа к веб-серверу. Монтируется конфигурационный файл Nginx и директория с файлами HTML.

  1. Далее создайте конфигурационный файл Nginx (например, nginx.conf) и поместите его в директорию проекта. Например:

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  server {
    listen 80;а
      server_name localhost;
      location / {
        root /usr/share/nginx/html;
        index index.html;
      }
   }
}

Команда выше определяет один сервер на порту 80, который обслуживает файлы из директории /usr/share/nginx/html.

  1. Создайте директорию html и поместите в нее файлы HTML, которые будут обслуживаться веб-сервером.
  2. Запустите контейнеры в фоновом режиме с помощью команды:

$ docker-compose up -d

  1. Проверьте статусы контейнеров с помощью команды:

$ docker-compose ps

  1. Откройте веб-браузер и перейдите по адресу http://localhost, чтобы убедиться, что Nginx работает и обслуживает файлы HTML из директории html.

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

Настройка PHP

Настройка PHP с помощью Docker Compose позволяет вам создать и запустить контейнер для разработки и выполнения PHP-приложений.

  1. Создайте новый каталог для своего проекта и перейдите в него с помощью терминала.
  2. В каталоге создайте два новых файла: docker-compose.yml и index.php.
  3. Откройте docker-compose.yml и добавьте следующий код:

version: "3"
services:
  php:
    image: php:7.4-apache
    ports:
      - 8000:80
    volumes:
      - ./index.php:/var/www/html/index.php
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
     MYSQL_DATABASE: database
     MYSQL_USER: username
     MYSQL_PASSWORD: password

В этом файле мы определяем две службы: php и db. Служба php использует образ php:7.4-apache, открывает порт 80 на хост-компьютере и монтирует файл index.php в контейнер.

  1. Далее откройте index.php и добавьте следующий код:

<?php
echo "Hello, world!";

  1. Сохраните оба файла и вернитесь в терминал.
  2. Чтобы запустить контейнеры, выполните:

docker-compose up -d

Эта команда скачает необходимые образы, создаст и запустит контейнеры в отключенном режиме.

  1. После запуска контейнеров откройте веб-браузер и перейдите по адресу http://localhost:8000. Вы должны увидеть текст «Hello, world!».

Настройка PHP с помощью Docker Compose завершена.

Запуск контейнера

Для запуска контейнера с помощью Docker Compose необходимо выполнить несколько простых шагов.

  1. Убедитесь, что у вас есть файл docker-compose.yml в корневой директории вашего проекта. В этом файле определены настройки и конфигурация ваших сервисов.
  2. Откройте терминал или командную строку и перейдите в директорию с файлом docker-compose.yml.
  3. Чтобы запустить ваши контейнеры выполните команду:

docker-compose up

Если вы хотите запустить контейнеры в фоновом режиме, добавьте флаг -d:

docker-compose up -d

  1. Docker Compose начнет загрузку образов и создание контейнеров в соответствии с конфигурацией, определенной в файле docker-compose.yml.
  2. Вы увидите вывод информации о запуске контейнеров, включая их имена и статус. Вы также можете отслеживать журналы контейнеров, используя команду docker-compose logs.
  3. После успешного запуска контейнеров вы можете работать с ними. Например, открывать веб-приложения в веб-браузере, отправлять запросы к API или использовать команду docker exec для выполнения команд внутри контейнера.

Для остановки контейнеров, используйте сочетание клавиш Ctrl + C в терминале, в котором вы запустили docker-compose up. Если вы запускали контейнеры в фоновом режиме, выполните docker-compose down в той же директории, чтобы остановить и удалить контейнеры.

Мы рассмотрели процесс установки Docker Compose и настройки Laravel, Nginx и MySQL с его помощью. Использование Docker Compose даёт контроль над процессом создания образов Docker. Dockerfile позволяет описать и автоматизировать все необходимые настройки, зависимости и шаги для создания рабочего окружения в виде контейнеров. Это способствует повышению согласованности, воспроизводимости и управляемости вашего приложения и его инфраструктуры.

Услуга Аренда выделенного сервера позволит вам развернуть на оборудовании проекты любой сложности. Арендованный сервер отлично подойдет для создания контейнеров Docker тем, кто делает это впервые, а также для продвинутых разработчиков, имеющих опыт работы с Docker.

Всё ещё остались вопросы?