В одной из предыдущих статей мы готовили сам фреймворк к разработке проекта здесь же будет речь о полной подготовке – докер, бэк-энд и фронт-энд(поскольку 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 есть графические интерфейсы.
Заключение
Вступительно-ознакомительная часть с докером окончена. Далее немного углубим знакомство с докером и соберем приложение Ларавел.

