Настройка Docker для Laravel позволяет разработчикам легко создавать и управлять средами разработки, обеспечивая консистентность между различными средами (например, локальной разработки, тестирования и продакшена). В этом обзоре мы рассмотрим, как настроить Docker для Laravel, включая создание Dockerfile, настройку Docker Compose и запуск Laravel в контейнере Docker.

Шаг 1: Создание Dockerfile

Dockerfile определяет, как создать образ Docker для вашего Laravel приложения. Создайте файл Dockerfile в корне вашего проекта Laravel.

FROM php:7.4-fpm

# Установка зависимостей
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl

# Установка расширений PHP
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-freetype=/usr/include/
RUN docker-php-ext-install gd

# Установка Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Настройка рабочего каталога
WORKDIR /var/www

# Копирование исходного кода приложения
COPY . /var/www

# Установка зависимостей Laravel
RUN composer install

# Настройка прав доступа
RUN chown -R www-data:www-data /var/www

# Команда для запуска
CMD ["php-fpm"]

Шаг 2: Настройка Docker Compose

Docker Compose позволяет определить и запустить многоконтейнерные приложения Docker. Создайте файл docker-compose.yml в корне вашего проекта Laravel.

version: '3'
services:
 app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./:/var/www
    networks:
      - laravel

 nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./:/var/www
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - laravel

networks:
 laravel:
    driver: bridge

Шаг 3: Настройка Nginx

Создайте конфигурационный файл Nginx default.conf в каталоге nginx вашего проекта.

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny all;
    }
}

Шаг 4: Запуск Laravel в Docker

Чтобы запустить ваше Laravel приложение в Docker, выполните следующую команду в корне вашего проекта:

docker-compose up -d

Это создаст и запустит контейнеры для вашего Laravel приложения и Nginx, обеспечивая доступ к приложению через веб-браузер по адресу http://localhost.

Заключение

Настройка Docker для Laravel позволяет разработчикам легко создавать и управлять средами разработки, обеспечивая консистентность между различными средами. Использование Dockerfile, Docker Compose и Nginx позволяет легко развернуть и запустить Laravel приложение в контейнере Docker, упрощая процесс разработки и тестирования.