Laravel: готовим новый проект. ч1 Docker 

Laravel: готовим новый проект. ч1 Docker 

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

Заключение

Вступительно-ознакомительная часть с докером окончена. Далее немного углубим знакомство с докером и соберем приложение Ларавел.

Добавить комментарий

Ваш адрес email не будет опубликован.