2015-10-07 2 views
0

Я довольно новичок в Docker. Я много играл с Docker в моей среде разработки, но я попытался развернуть реальное приложение только один раз.Доклерная архитектура PHP-приложений Лучшие практики

Я прочитал множество документов и просмотрел десятки видеороликов, но у меня еще много вопросов. Я действительно понимаю, что Docker - это просто инструмент, который можно использовать по-разному, но теперь я пытаюсь найти лучший способ разработки и развертывания веб-приложений.

Я буду использовать реальный случай приложения PHP, чтобы сделать мой вопрос более конкретным и практичным. Для простоты предположим, что я строю очень простой PHP приложения, так что я буду нуждаться:

  1. Веб-сервер (Nginx)
  2. PHP интерпретатора (PHP-FPM или hhvm)
  3. Persistent хранения для СЕССИЙ

Лучший пример/учебник, который я мог найти, был this one year old post. Дилан предлагает такую ​​структуру: Dockerized PHP App

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

Это понятно. Я хочу обмениваться данными через nginx и php-fpm. nginx нуждается в доступе к статическим файлам (.img, .css, .js ...) и php-fpm нужен доступ к файлам PHP. И обе службы разделены, поэтому их можно обновлять/изменять независимо.

Контейнер с данными только a data volume, который связан с nginx и php-fpm по --volumes-from.

Но, как я понимаю - есть проблема с контейнерами данных и -v. Official Docker Documentation говорит, что data volume специально предназначен для хранения данных! Говорят, что

Тома данных сохраняются, даже если сам контейнер удален.

Так что это решение отлично подходит для данных, которые я не хочу потерять, например, файлы сеансов, хранилище БД, журналы и т. Д. Но не для моих кодовых файлов, не так ли? Я хочу изменить свои файлы кода. Я хочу развернуть изменения без восстановления nginx и php-fpm изображений.

Другая проблема заключается в том, что, когда я пробовал этот подход, я не мог развернуть изменения кода, пока не остановил все запущенные контейнеры, не удалил их и их изображения и не перестроил их полностью. Просто восстановление и развертывание изображений только с данными ничего не сделало!

Я видел некоторые другие реализации, когда данные хранятся непосредственно в контейнере Interpreter, но это не опция, потому что мне нужен nginx, чтобы иметь доступ к этим файлам.

Вопрос в том, что является наилучшей практикой в ​​том, где размещать файлы кода проекта и как развертывание изменений для такого приложения?

Спасибо.

+0

Я добавил немного подробнее, чтобы уточнить, дайте мне знать, если это поможет – dnephin

ответ

2

Правильно, не используйте объем данных для вашего кода. docker-compose делает ставку на повторное использование старых томов (поэтому вы не теряете данные), поэтому вы всегда будете придерживаться старого кода.

Используйте COPY директиву, чтобы добавить статические ресурсы в Nginx Dockerfile и COPY в заявке (phpfpm) Dockerfile добавить код. В dev вы можете использовать хост-хост, чтобы вам не пришлось перезапускать контейнеры, чтобы увидеть изменения вашего кода (при условии, что веб-сервер поддерживает сбор изменений).

+0

Спасибо! Это имеет смысл, хотя немного неудобно имхо ... – oleynikd

Смежные вопросы