Как удобно выполнять composer / npm / artisan / ... в Docker?

Если до докера это всё делалось в терминале по F12 и вкладке интеграции с node, кликом мышкой по npm команде, то как это удобно делать сейчас?
В PhpStorm есть интеграция с Docker и там по клику на запущенном контейнере, можно сделать exec команды. Делаю exec bash по php и вот там, маленьком и неудобном терминале, могу писать уже composer или artisan. И вот так вот надо работать теперь? Или как-то по другому это всё делается?

Ещё вопрос. Я правильно делаю, что ставлю composer / git в Dockerfile к php? Или нужно отдельный контейнер для композера?
  • Вопрос задан
  • 2229 просмотров
Пригласить эксперта
Ответы на вопрос 7
@gupovski
Через docker-compose пользуюсь командой в терминале:
docker-compose run *название контейнера* *команда* (например php artisan)
Ответ написан
OnYourLips
@OnYourLips
Вы собираете проект в одном контейнере, там есть композер и другие инструменты сборки
И запускаете потом в другом, где только php и код.
Ответ написан
@vladitot
Если я правильно понял, то вопрос стоит в том, чтобы удобно выполнять повторяющиеся операции внутри докер-контейнеров.
У меня возник напряг с тем, что нужно постоянно подключаться внутрь контейнеров и выполнять операции внутри них. Поэтому я набросал себе простенький плагин для композера.
Делался для себя. Если кому-то покажется интересным и накидаете issues, то займусь допиливанием.
https://github.com/vladitot/composer-extra-plugin
Ответ написан
@metajiji
Используйте multistage build, это когда пишут 2 и более раз директиву FROM, что позволит собирать артефакты в 1 Dockerfile и не захламлять итоговый образ.
Ответ написан
Если я правильно понял, вы хотите локально выполнять сборку в контейнере, а затем тестировать работу приложухи с его же помощью.

Путей несколько, разной степени сложности и с разным результатом. Думаю, самым простым для вас будет написать баш-скрипт, в котором прописана вся последовательность вызовов composer и прочего, и положить скрипт внутрь контейнера на этапе сборки. Затем, просто вызывать его через exec в phpstorm по необходимости.
Ответ написан
zetamen
@zetamen
В поисках нового
Любой скрипт строго говоря тоже процесс, просто прерываемый. Поэтому по завету должен бежать в отдельном умираемом контейнере.

Если composer и artisan еще как то вписываются в php контейнер, то npm уже как-то хочется иметь в отдельном контейнере. И было бы странно разделять подходы. Поэтому для каждого инструмента заводите отдельный dockerfile. Такое разделение также облегчит обновление инструментов, хотя, подозреваю, для многих это не так важно.
Ответ написан
В файле докеркомпозе для разработки оставляю консоль для контейнеров
...
python_server:
        stdin_open: true
        tty: true
        ...

Потом конекчусь к запущенному контейнеру
docker exec -it <имя контейнера> bash
И делаю в нём что нужно. Например, запускаю и кладу свой скрипт. И прочее.
При этом правлю код снаружи.
В докер композе для публикации лишнее убирается и код размещается в контейнер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы