Контейнеризация – это метод разработки, доставки и выполнения приложений с использованием изолированной среды. Такой способ позволяет упаковывать приложение и его зависимости в качестве изолированной единицы, называемой контейнером. Каждый контейнер содержит все необходимые компоненты для работы приложения, включая библиотеки, среду выполнения и настройки.
Контейнеры создаются с использованием контейнерных платформ, таких как Docker. Они обеспечивают среду, которая полностью изолирована от окружающей системы, при этом не важно, какая операционная система используется.
Подробнее о том, что такое Docker, как он работает и для чего используется вы можете узнать в статье «Краткий экскурс в Docker».
Далее будет рассказано о том, как выполнить настройку контейнеризации при помощи стека LEMP (Linux, Nginx, MySQL и PHP). Для этого потребуется установка Laravel.
Laravel – это фреймворк для веб-приложений, который распространяется бесплатно. Он предоставляет удобные инструменты для создания высокопроизводительных и масштабируемых приложений с использованием современных подходов. Чтобы установить Laravel, выполните следующие шаги:
composer global require laravel/installer
laravel new project
Где project – имя вашего нового проекта.
cd project
php artisan serve
Чтобы открыть проект в браузере, перейдите по адресу http://localhost:8000. Теперь у вас есть установленный и работающий проект Laravel.
После установки Laravel важно сгенерировать ключ APP_KEY – ключ шифрования сессий и кук. Он представляет собой случайную строку из 32 символов и находится в файле .env. Если установка Laravel выполнена при помощи Composer, то ключ приложения Laravel сгенерирован автоматически.
Docker Compose – это инструмент, который позволяет запускать многоконтейнерные приложения в Docker. Он используется для описания конфигурации нескольких контейнеров в одном файле, который называется docker-compose.yml. Docker Compose позволяет быстро развернуть и масштабировать приложения с несколькими контейнерами.
Почему используют Docker Compose:
Dockerfile – это текстовый файл, содержащий инструкции для построения образа Docker. Он определяет какой базовый образ следует использовать, как установить зависимости, как скопировать файлы в образ, как настроить окружение и многое другое.
Почему создание Dockerfile является важным:
Ниже представлена инструкция как создать Dockerfile:
FROM ubuntu:latest
WORKDIR /app
COPY index.html /app
CMD python server.py
docker build -t myimage:latest
Вы можете запустить контейнер с помощью команды docker run, используя тег образа:
docker run myimage:latest
Используйте другие инструкции при настройке Dockerfile. Основные из них приведены на ниже:
Перейдем к настройке MySQL, Nginx и PHP с помощью Docker Compose.
Настройка 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.
$ docker-compose up -d
$ docker-compose ps
Эта команда покажет список всех запущенных контейнеров и их статус.
$ mysql -h localhost -P 3306 -u user -p
Теперь вы можете использовать MySQL в своем приложении, подключившись к нему через порт 3306 на локальной машине.
Настройка 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.
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.
$ docker-compose up -d
$ docker-compose ps
Теперь вы можете использовать Nginx в своем приложении, настроив его конфигурационный файл и монтируя директории с файлами, которые должны быть доступны через веб-сервер.
Настройка PHP
Настройка PHP с помощью Docker Compose позволяет вам создать и запустить контейнер для разработки и выполнения PHP-приложений.
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 в контейнер.
<?php
echo "Hello, world!";
docker-compose up -d
Эта команда скачает необходимые образы, создаст и запустит контейнеры в отключенном режиме.
Настройка PHP с помощью Docker Compose завершена.
Для запуска контейнера с помощью Docker Compose необходимо выполнить несколько простых шагов.
docker-compose up
Если вы хотите запустить контейнеры в фоновом режиме, добавьте флаг -d:
docker-compose up -d
Для остановки контейнеров, используйте сочетание клавиш Ctrl + C в терминале, в котором вы запустили docker-compose up. Если вы запускали контейнеры в фоновом режиме, выполните docker-compose down в той же директории, чтобы остановить и удалить контейнеры.
Мы рассмотрели процесс установки Docker Compose и настройки Laravel, Nginx и MySQL с его помощью. Использование Docker Compose даёт контроль над процессом создания образов Docker. Dockerfile позволяет описать и автоматизировать все необходимые настройки, зависимости и шаги для создания рабочего окружения в виде контейнеров. Это способствует повышению согласованности, воспроизводимости и управляемости вашего приложения и его инфраструктуры.
Услуга Аренда выделенного сервера позволит вам развернуть на оборудовании проекты любой сложности. Арендованный сервер отлично подойдет для создания контейнеров Docker тем, кто делает это впервые, а также для продвинутых разработчиков, имеющих опыт работы с Docker.