У меня небольшая теоретическая проблема с комбинацией php-fpm, nginx и кода приложения в Docker.
Я пытаюсь придерживаться модели, когда изображение докеров имеет только одно: у меня есть отдельные контейнеры для php-fpm и nginx.
php:
image: php:5-fpm-alpine
expose:
- 9000:9000
volumes:
- ./:/var/www/app
nginx:
image: nginx:alpine
ports:
- 3000:80
links:
- php
volumes:
- ./nginx/app.conf:/etc/nginx/conf.d/app.conf
- ./:/var/www/app
ПРИМЕЧАНИЕ. В app.conf указано root /var/www/app;
Пример схемы из Symfony
Это здорово в разработке, но я не знаю, как преобразовать это в готовое состояние производства. Установить каталог приложений в производстве - это действительно плохая практика (если я не ошибаюсь). В лучшем случае я копирую исходный код приложения в контейнер и использую этот предварительно построенный код (COPY . /var/www/app
in Dockerfile
), но в этом случае невозможно, или я не знаю, как это сделать.
Мне нужно использовать общий исходный код приложения между двумя контейнерами (контейнером nginx и контейнером php-fpm), потому что для него это необходимо.
Конечно, я могу создать собственный контейнер nginx и php-fpm и добавить COPY . /var/www/app
в оба из них, но я ошибаюсь, потому что я дублирую код и весь процесс сборки (устанавливаю зависимости, создаю исходный код и т.д.)...) должны быть в обоих контейнерах (nginx/php-fpm).
Я пытаюсь выполнить поиск, но я не знаю, как решить эту проблему. Многие статьи показывают, как сделать это с помощью файла docker-compose и кода монтирования с помощью --volume, но я не нашел никакого примера, как использовать это при создании (без тома).
Только одно приемлемое решение для меня (в это время) заключается в создании одного контейнера с nginx и php-fpm вместе, но я не уверен, когда это хороший способ (Я пытаюсь найти наилучшую практику).
Есть ли у вас опыт в этом или какая-либо идея, как его решить?
Спасибо за любой ответ!