Для чего делать отдельный контейнер под php-cli?
ДД. Изучаю Docker, многое еще не знаю. Увидел пару кейсов, когда в docker-compose файле отдельные контейнеры для php-cli и php-fpm.
Конкретно интересно понять полезность для Laravel-based проектах.
Дополнительно:
Дело не (столько) в полезности, а в самой парадигме контейнеризации приложений - каждому сервису свой контейнер. РНР в данном случае ничем не отличается от любого другого бэкенда - ноды, питона и т. п.
- Это понятно. Но мне не совсем понятно зачем делают помимо php-fpm контейнеров, еще cli контейнер. Какие его задачи?
- Flexi, кто делает-то? Ни разу нигде не видел например.
- мне показалось что он имеет ввиду разные 2 разных контейнера под fpm и cli
- Владислав Лысков, да, именно так.
- Flexi, тоже ни разу не видел что кто-то так делает, если на это и есть причины, но это не не типичный случай
- Александр Аксентьев, Владислав Лысков, например: тыц, тыц
Может я конечно что-то не понимаю)
- Flexi, возможно, кому-то хочется запускать некие скрипты непосредственно из командной строки - по таймеру или ещё как-то. Для этого и можно, например, дёрнуть контейнер с php-cli docker exec`ом.
- Flexi, очень авторитетные источники вопросы на хабре от людей которые не могут поднять, то что сами там слепили)
Может они уже узнали с тех пор что можно запускать что-либо через php-cli прямо из fpm контейнера.
- Flexi, посмотрим, может кто-нибудь более прошаренный расскажет
- ky0, в принципе в это есть какая-то логика, но как написал Александр Аксентьев в fpm контейнере тоже можно запускать скрипты.
- Flexi, и в fpm можно запускать скрипты, не вижу проблем, у меня самого
docker compose up -d php ### && docker compose exec php composer install && docker compose exec php php artisan migrate && ###
docker compose up -d php ### && docker compose exec php composer install && docker compose exec php php artisan migrate && ###
прекрасно отрабатывает.
Вот если, как правильно заметил pantsarny , нужно другое окружение, например версия php или другой volume, или какие-то особые требования к ресурсам и/или безопасности - тогда да, можно и отдельно.
Для разделения ресурсов системы
- В кли могут быть запущены долгоживущие процессы, возможно с утечкой памяти, или с высокой нагрузкой ЦПУ. Также может требоваться другой набор библиотек или окружения. С помощью отдельного контейнера можно решить эти вопросы
Ответы:
LAMP/LEMP стек прекрасно и без докеров живёт. Если автор никак не объясняет такое разделение, то скорее всего от нечего делать.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Делать отдельный контейнер под PHP-CLI может быть полезно по нескольким причинам:
1. Изоляция окружения: Когда вы запускаете PHP скрипты из командной строки, вы можете столкнуться с конфликтами версий PHP или зависимостей, если у вас уже установлен другой PHP на вашем сервере. Создание отдельного контейнера под PHP-CLI позволит избежать этих конфликтов, так как в контейнере будет установлена конкретная версия PHP и все необходимые зависимости.
2. Удобство разработки и тестирования: Работа с PHP из командной строки может быть удобна при разработке и тестировании скриптов, например, скриптов для автоматизации задач. При этом у вас будет возможность быстро создавать и запускать контейнеры с необходимым окружением, что упростит процесс разработки.
3. Повышение безопасности: Использование отдельного контейнера для PHP-CLI поможет уменьшить риски безопасности, так как вы можете контролировать доступ к файлам и ресурсам, к которым имеет доступ PHP из командной строки. Это особенно важно, если вы работаете с конфиденциальными данными или выполняете скрипты с повышенными привилегиями.
Пример использования контейнера для PHP-CLI:
# Создание Dockerfile для контейнера с PHP-CLI FROM php:7.4-cli # Установка дополнительных зависимостей, если необходимо RUN apt-get update && apt-get install -y \ git \ zip \ unzip # Копирование исходного кода приложения в контейнер COPY . /usr/src/myapp WORKDIR /usr/src/myapp # Установка зависимостей приложения RUN composer install # Запуск PHP скрипта CMD ["php", "script.php"]
Таким образом, создание отдельного контейнера под PHP-CLI может помочь вам упростить разработку, обеспечить изоляцию окружения и повысить безопасность ваших PHP скриптов, запускаемых из командной строки.