Задать вопрос

Как правильно вести разработку php приложения в docker?

Есть приложение на php. Работу над ней ведут несколько разработчиков. Код лежит в gitlab репозитории. Сейчас у каждого разработчика есть своя виртуальная машина, там установлены nginx, postgres, php-fpm. Разработчики код заливают по sftp. Все это хорошо работает. Но микросервисов становится много и нужна какая-та автоматизация запуска приложения.

Сейчас хочется все перевести в docker. Мы собрали образ на основе php7-fpm. Нужно чтобы контейнер содержал код из мастер ветки и при мердже в эту ветку автоматом собирался. Это мы настроим через gitlab ci.

Вот у нас есть контейнер с кодом внутри, чтобы запустить нужно прописать конфиги в .env файле и запустить его с помощью docker-compose. Все работает.

Но как теперь разработчику вести разработку? Допустим он изменил файл index.php, как теперь измененный файл засунуть в docker контейнер? Тут я вижу 2 варианта:
  1. volume папка. Т.е. папка с кодом приложения шарится между хост машиной (хост машиной будет виртуалка разработчиков)
  2. Подключение по ssh к контейнеру и заливка по sftp


У первого пункта есть несколько недостатков:
  1. volume папка внутри контейнера создается от имени root. В код приложения должен и работает от имени обычного пользователя.
  2. Если эта папка есть в контейнера, то она удаляется и создается с нуля. Т.е. если расшарим папку с кодом, то код просто удалится


В ENTRYPOINT в Dockerfile можно засунуть bash скрипт файл в котором можно будет делать манипуляции с папками.

У второго пункта пока не знаю проблем.

Еще раз вопрос: как заливать изменения кода при разработке программисту в работающий контейнер?

Желательно решить вопрос так чтобы программист не парился с бильдингом docker.

Как решаете это Вы?
  • Вопрос задан
  • 4193 просмотра
Подписаться 25 Простой 3 комментария
Ответ пользователя abr_habr К ответам на вопрос (5)
@abr_habr
Мы пошли по первому пути. Я просто переделал php-fpm образ, дописав в нём в docker-entrypoint создание пользователя, которому принадлежит монтируемая папка. Плюс сам php-fpm внутри контейнера теперь тоже запускается от этого пользователя.
Плюс этого подхода в том, что в кастомный образ я добавил xdebug, которого нет в оригинальной поставке.
Ответ написан
Комментировать