leadsdoit/lara-php

By leadsdoit

Updated about 1 month ago

Images for Laravel with PostgreSQL

Image
Languages & Frameworks
Web Servers
Developer Tools

235

leadsdoit/lara-php

Данный образ основан на образе php:${PHP_VER}-fpm для работы с laravel framework.

Опубликовано на Docker Hub

Пример использования

Dev
version: '3.8'

services:
    php-dev:
        image: leadsdoit/lara-php:8.3-dev
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        container_name: docker_php_dev
        restart: always
        volumes:
            - ./:/app
            # - "./script/php/php.ini:/usr/local/etc/php/conf.d/88-conf.ini:ro"
            # - "./script/php/xdebug.ini:/usr/local/etc/php/conf.d/99-xdebug.ini:ro"
        environment:
            PHP_IDE_CONFIG: "serverName=docker_php_dev"
            IGNITION_LOCAL_SITES_PATH: '${PWD}'
            CONTAINER_ROLE: "app"
            LARAVEL_SAIL: 1
            # XDEBUG_MODE: "off"
        ports:
            - "127.0.0.1:9002:9000"
alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

sail up -d --build

sail composer install

Prod

Dockerfile

FROM leadsdoit/lara-php:8.3

WORKDIR /app
COPY . .
RUN [ -d /app/vendor ] && rm -r /app/vendor || echo "Directory /app/vendor does not exist"
RUN rm -r /app/docker

RUN chown -R www-data:www-data /app  \
    && chmod -R 755 /app/storage

RUN composer install --optimize-autoloader  --no-dev

docker-compose.yml

version: '3.8'

x-common-app-settings: &common-app-settings
    image: leadsdoit/lara-php:8.3
    restart: always
    working_dir: /app
    networks:
        - lara-network

services:
    app_php:
        <<: *common-app-settings
        container_name: lara_app_php
        environment:
            CONTAINER_ROLE: "app"
        depends_on:
            db:
                condition: service_healthy
            redis:
                condition: service_healthy

    app_queue:
        <<: *common-app-settings
        container_name: lara_app_queue
        environment:
            CONTAINER_ROLE: "queue"
        depends_on:
            - app_php

    app_cron:
        <<: *common-app-settings
        container_name: lara_app_cron
        environment:
            CONTAINER_ROLE: "cron"
        depends_on:
            - app_php

Расширения

В образе установлен composer

В также следующие расширения:

  • zip
  • opcache
  • intl
  • pcntl
  • sockets
  • bcmath
  • redis
  • soap
  • pgsql
  • pdo_pgsql

В образе присутствует скрипт install-php-extensions и если необходимо установить еще какие-то расширения добавьте в Dockerfile вызов скрипта install-php-extensions

FROM leadsdoit/lara-php:8.3-dev as phpdev

RUN install-php-extensions \
    mysqli \
    pdo_mysql

Доступные расширения

RUN install-php-extensions <нужные расширения через пробел>

Роли

Образ умеет работать в следующих ролях

  • app
  • queue
  • cron

Для выбора роли передаем ее в переменную CONTAINER_ROLE. По умолчанию роль app

Роль queue может получать следующие настройки:

  • WORK_ON_QUEUES - задает какие очереди может обработать, по умолчанию = height,default,low
  • QUEUE_CONNECTION - драйвер подключения, если не передать - будет брать тот который по умолчанию
  • QUEUE_TIMEOUT - таймаут по умолчанию, если не задать будет 60 сек
  • QUEUE_TRIES - количество повторов по умолчанию, если не задать будет 1

Конфигурации

Если необходимо настроить под себя, образ содержит следующие конфигурации, которые можно подменить

PHP

/usr/local/etc/php/conf.d/00-conf.ini

X-Debug

/usr/local/etc/php/conf.d/01-xdebug.ini

Cron

/etc/cron.d/app_cron

Entrypoint-скрипт

/usr/local/bin/entrypoint

Режим разработки

В образе с суффиксом -dev установлен X-Debug.

Он сконфигурирован минимальными настройками: /usr/local/etc/php/conf.d/01-xdebug.ini

Переменные

Управлять режимами можно при помощи переменных

  • XDEBUG_MODE - включает режим debug, по умолчанию включен on, при необходимости можно выключить, передайте off
  • LARAVEL_SAIL - включает режим sail, по умолчанию включен 1, для отключения передайте 0
Sail

Более подробно прочитать можно тут

В образ добавлен пользователь sail

Для корректного режима sail необходимо в файле .env добавить переменную APP_SERVICE=<имя контейнера>

Scripts

Dev App

Данный скрипт доступен только в версии DEV

  • Если через docker

    docker exec -it <имя контейнера> dev-app

  • Если создано через docker compose

    docker compose exec <имя сервиса> dev-app

При запуске скрипта будет вызвано меню

Выберите категорию:
1. node
2. lara
3. Выход
Node

Данная категория позволяет установить node.js нужной версии. Внутри контейнера ставится NVM, а далее через него устанавливается нужная версия и делается по умолчанию.

Можно сразу вызвать установку 22-й версии

docker compose exec <имя сервиса> dev-app node install 22

После установки Node.js он доступен для внешнего вызова

docker compose exec <имя сервиса> node -v

Внимание: node.js ставится в текущий контейнер, и при пересоздании контейнера, команду надо выполнять по новой. Если надо чтоб он был всегда, создайте Dockerfile и добавьте туда выполнение этого скрипта.

FROM leadsdoit/lara-php:8.3-dev

RUN dev-app node install 22

Если вы используете sail команды с node будут доступны и через него

sail node -v

sail npm run dev
Lara

Данная категория позволяет развернуть внутри контейнера новое приложение laravel

Создаем в папке проекта минимальную конфигурацию docker-compose.yml

services:
    app_php:
        image: leadsdoit/lara-php:dev
        restart: always
        volumes:
            - ./:/app
        environment:
            CONTAINER_ROLE: "app"

Выполняем команду:

docker compose exec <имя сервиса> dev-app lara install

После этого внутри контейнера во временной папке создастся новое приложение, вы отвечаете на вопросы инициализации нового приложения Laravel, после чего все файлы будут перенесены в рабочую директорию /app

Если вы используете Linux или Mac или Windows WSL, после копирования, вам необходимо весь проект передать своему пользователю

sudo chown -R <ваш пользователь>:<ваш пользователь> .

Внимание: Установка не сработает если уже есть проект

Docker Pull Command

docker pull leadsdoit/lara-php