Статья также доступна на украинском (перейти к просмотру).
Содержание:
Эффективное развертывание и масштабирование современных веб-приложений трудно представить без использования контейнерной среды, одной из реализаций которой является Docker Compose. Сервис позволяет производить быструю упаковку приложений и их зависимостей в кроссплатформенные контейнеры, которые затем легко можно развернуть на любой платформе независимо друг от друга. Рассмотрим процесс создания и запуска в среде Docker Compose многоконтейнерного PHP-приложения из СУБДMySQL на VPS-сервере под управлением ОСDebian Bookworm Debian.
Формирование контейнерной среды
Перед началом работы над созданием веб-проекта необходимо подготовить соответствующее Docker-среда. Использование Docker Compose возможно только при наличии Docker Engine и потому выясним его текущий статус на нашем VPS-серверы.
Это можно сделать с помощью команды info, которая предоставит нам полную информацию о сервисе:
$ docker info
Выход:
Client: Docker Engine – Community Version: 28.0.1
Это означает, что сервис Docker Engine уже развернут на нашем сервере. Его версия – 28.0.1.
В случае, если сервис отсутствует, его следует установить, руководствуясь инструкцией, приведенной нами ранее в статьи для VPS-серверу Ubuntu. Только необходимо в соответствующих командах заменить тип и версию. ОС на реально установленную на вашем сервере. В нашем случае – на Debian Bookworm Stable.
Проверим наличие Compose:
$ docker-compose --version
Выход: -bash: docker-compose: command not found
Как видим, сервис отсутствует и потому переходим к процессу его установки
$ apt install docker-compose
Подтверждаем свое согласие на выделение дополнительных 46,8 MB дискового пространства и «идем дальше». Ниже выведен конечный экран команды
Выход:
Setting up docker-compose
Проверим версию программы:
$ docker-compose --version
Выход: docker-compose version 1.29.2, build unknown
Создание веб-проекта
Структура веб-проекта определяется набором служб с описанием правил их взаимодействия между собой, которые посредством директив присутствуют в файле docker-compose.ymll. Следовательно, он является главным файлом проекта в среде Docker Compose и потому должен находиться в его корневой директории.
Обязательным элементом приложения является файл с именем Dockerfile. Он содержит инструкции для формовки или сборки Docker-шаблонов приложения с необходимыми зависимостями и последующего запуска в контейнерной среде. Он всегда находится в корне определенного веб-приложения.
Составной частью любого веб-приложения является его индексный файл, содержащий основной код и определяющий его работу. Находится файл в корневой директории приложения.
Ниже представлена структура нашего проекта, включающая все описанные нами элементы.
Здесь директория newproject_php является главным каталогом проекта, а директория one-app – главным каталогом веб-приложения.
Реализуем этот проект в подготовленной нами контейнерной среде. Для этого разобьем процесс на несколько этапов:
-
формирование структуры каталогов;
-
Создание конфигурационного файла проектаdocker-compose.yml;
-
Создание конфигурационного файла веб-приложения Dockerfile;
-
Подготовка и размещение индексного файла веб-приложения.
Формирование структуры каталогов
Создадим необходимые каталоги с помощью одной команды. Для этого введем в терминале:
$ mkdir -p newproject_php/one-app
Структура готова.
Создание конфигурационного файла docker-compose.yml
Ниже приводятся директивы будущего файла вместе с их описанием в виде комментариев.
version: '3.8' services: one-app: build: ./one-app # Создание Docker-образа приложения с показанными директориям ports: - "8080:80" # Согласовываются порты хоста и контейнера depends_on: - mysql # Обеспечивается выполнение зависимостей – запуск СУБД mysql: image: mysql:8.0 # Указывается использование официального образа СУБД
ports: - "3306:3306" # Согласование портов хоста и контейнера environment: MYSQL_ROOT_PASSWORD: root # Пароль корневого пользователя для MySQL MYSQL_DATABASE: mydb # Инициирование создания СУБД volumes: - mysql-data:/var/lib/mysql # Сохранение данных СУБД в именуемом том volumes: mysql-data: # Декларирование имени тома для хранения данных СУБ
Поместим приведенный код в новый файл и сохраним его на диске nano:
$ nano newproject_php/docker-compose.yml
Сохраним внесенные изменения и выйдем из редактора (ctrl+X).
Перейдем к следующему этапу.
Создание конфигурационного файла Dockerfile
Приведем код будущего файла вместе с комментариями:
# Указание на использование официального образа PHP FROM php:8.2-apache # Установка плагина PDO для MySQL RUN docker-php-ext-install pdo pdo_mysql # Установка рабочей директории WORKDIR /var/www/html # Копирование кода приложения COPY index.php # Открытие порта контейнера EXPOSE 80
Вызовем редактор и вставим приведенный код в файл конфигурации:
$ nano newproject_php/one-app/Dockerfile
Сохраним внесенные изменения и выйдем из редактора.
Подготовка и размещение индексного файла веб-приложения
В нашем случае код файла будет определять процесс создания нового соединения и подключения к контейнеру СУБДMySQL. Его код приведен ниже.
<?php $servername = "mysql"; // Ім’я визначається у файлі docker-compose.yml $username = "root"; $password = "root"; $database = "mydb"; try { // Создание нового соединения $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password) // Установка режима PDO ошибок на исключение $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected to MySQL successfully!"; } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
Вставим код в индексный файл с помощью следующей команды:
$ nano newproject_php/one-app/index.php
Сохраним файл на диске и перейдем к этапу сборки и тестированию веб-проекта.
Тестирование и запуск веб-проекта
Для тестирования и запуска проекта необходимо выполнить сборку контейнеров, как определено в конфигурационном файле Dockerfile. Для этого воспользуемся соответствующей командой сервиса Docker Compose.
Для этого введем в терминале:
$ cd newproject_php
Запустим процесс сборки проекта:
$ docker-compose up --build
Программа разбила процесс на несколько этапов в соответствии с имеющимися инструкциями в файлах конфигурации.
Создание внутренней сети под названием newproject_php_default, предназначенная для объединения всех контейнеров между собой.
Создание тома под названием newproject_php_mysql-data для хранения данных
Загрузка базовых шаблонов для mysql:8.0 та php:8.2-apache.
Результаты выполнения указанных операций выводятся в предыдущем окне терминала.
Развертывание плагина PDO для MySQL (Step 2/5 : RUN docker-php-ext-install pdo pdo_mysql), ход которого показан на скриншотах ниже.
Результат: Build complete
Инициализация рабочей директории приложения (Шаг 3/5: WORKDIR /var/www/html).
Копирование кода приложения (Step 4/5 : COPY index.php . )
Открытие порта 80 контейнера (Step 5/5 : EXPOSE 80).
Программа вывела результаты успешного завершения процесса сборки и развертывания проекта:
Successfully tagged newproject_php_one-app:latest
Creating newproject_php_mysql_1 ... done Creating newproject_php_one-app_1 ... done Attaching to newproject_php_mysql_1, newproject_php_one-app_1
Чтобы убедиться, что подключение произошло и приложение работает, необходимо ввести в адресную строку браузера его адрес в следующем формате:
http://178.20.159.96:8080 Здесь 178.20.159.96 – IP-адрес нашего сервера pre>
Результат показан ниже.
Это именно то сообщение (Connected to MySQL successfully!), которое мы ввели в коде индексного файла для успешного подключения к mysql. Итак, все хорошо – проект рабочий.
Приглашаем Вас воспользоваться нашим VPS хостингом з Docker. Дата-центр FREEhost.UA предоставляет надежные серверы с поддержкой 24/7 и ежедневными бекапами. Уже через несколько минут после подтверждения заказа вы сможете начать работать с полностью настроенным сервером.
Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения.
Дата: 14.03.2025 Автор: Александр Ровник
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus