В одной из предыдущих статей мы готовили сам фреймворк к разработке проекта здесь же будет речь о полной подготовке – докер, бэк-энд и фронт-энд(поскольку Laravel это уже full-stack фреймворк).
Докер
Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает ПО в стандартизованные блоки, которые называются контейнерами.
Зачем он нам вообще нужен?
Как и многие, я начинал веб-разработку на локальном сервере. Однако потом появился Docker. Скажу что долго к нему присматривался и не понимал как к нему подойти. Так было до того пока я не попал на проект где его использовали. И скажу – это удобно!
Так да – зачем? Как минимум – удобная замена локальному веб-серверу – получил/собрал конфиг и пользуешься. Конфиг – композиция докера содержит описание всего окружения в котором работает приложение. К примеру, описывает версию php, его модулей, начальные команды. И так применительно ко всему- от сервера до composer`а. Таким образом, достаточно построить образ из композиции и запустить его в виде контейнера. Еще преимущество – работа над несколькими проектами с разным требованиями к проекту – просто остановил один контейнер и запустил другой.
docker-compose.yaml
Этот файл и есть нашей композицией(конфигом), описывающей несколько образов для проекта. Начнем проект с того что создадим его и заполним. Для разработки нам нужны сам php, сервер (NginX) и база данных(MySQL). Вот начальный код такого файла:
version: "3.8" services:
секция services как раз и описывает наши образы. Начнем с NginX(должен предупредить – отступы здесь значимые символы)
nginx: image: "nginx:stable-alpine" ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./src:/var/www/laravel
мы взяли стандартный образ сервера, потом сказали на каком порту хотим получать доступ к какому порту в контейнере(конкретно здесь – открытие в браузере). В последней секции(volumes) первая строка указывает на конфиг в путь на компе
: формате путь в контейнере
. Пример nginx.conf
server { listen 80; index index.php index.html; server_name localhost; root /var/www/laravel/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
Вторая строка указывает на директорию приложения в том же формате.
Затем построим php
php: build: context: dockerFiles dockerfile: php.Dockerfile volumes: - ./src:/var/www/laravel
Здесь мы строим не только контейнер но и сам php; инструкции для него лежат в dockerFiles/php.Dockerfile. Вот его содержимое
FROM php:8.2-fpm-alpine WORKDIR var/www/laravel RUN docker-php-ext-install pdo pdo_mysql
скачиваем стандартный образ языка с докер-хаба, назначаем рабочую директорию и отдаем команду включить расширение для работы с MySQL.
Ну и секция с MySQL
database: image: mysql:8.0 env_file: - env/mysql.env volumes: - db_data:/var/lib/mysql ports: - "3306:3306"
Все уже знакомо кроме env_file – это файл с переменными для построения БД в контейнере, вот его содержимое
MYSQL_DATABASE=laravel_db MYSQL_USERNAME=db_user MYSQL_PASSWORD=root MYSQL_ROOT_PASSWORD=root2
значения можно изменить, но поля нет.
Конфиг есть, что дальше?
А дальше, по конфигу строим образы
docker-compose build
и запускаем контейнеры
docker-compose up
Только прежде нужно установить докер. Для Windows и MacOS есть графические интерфейсы.
Заключение
Вступительно-ознакомительная часть с докером окончена. Далее немного углубим знакомство с докером и соберем приложение Ларавел.