В темные века моя обычная настройка для создания веб-приложений LAMP заключалась в локальном тестировании на моей машине. PHP (в моем случае), база данных и веб-сервер были установлены изначально.
Сервер был настроен со стандартными установками Apache и MySQL, и у меня было несколько виртуальных хостов для разных частей веб-приложения. Когда я был доволен результатами, полученными на моем локальном компьютере, я зашел на сервер и git pull
в промежуточную среду. Предполагая, что все работает на сервере, как это было на моей машине, я бы сделал то же самое для производства.
Новые начинания...
Итак, теперь я начинаю новое веб-приложение с нуля, и я хочу сделать это "правильно". Я читал о докерах, бродяжниках и куклах (и шеф-повара, хотя я лично предпочитаю систему кукольных игр, а не итеративный процесс Chef). Несмотря на все проведенные мной исследования, все еще есть несколько вопросов, на которые я не могу найти ответы:
Должны ли быть отдельные контейнеры Docker для веб-сервера (например, Apache), сервера базы данных (например, MySQL) и каждой части веб-приложения?
Когда я говорю о частях веб-приложения, я имею в виду такие вещи, как mysite.com, controlpanel.mysite.com и т.д. Эти "части" будут использовать одну и ту же базу данных.
Поскольку Docker, похоже, предлагает готовые контейнеры для таких вещей, как веб-серверы и серверы баз данных, похоже, что эти вещи, по крайней мере, должны быть в отдельных контейнерах. Должны ли разные части моего веб-приложения также находиться в отдельных контейнерах?
Контейнеры для докеров, похоже, предназначены для замены, а не для обновления программного обеспечения внутри них. Как насчет данных, которые они пишут, что я не хочу потерять?
Сервер базы данных будет управлять файлами, связанными с содержимым моей базы данных (что я хочу создать резервную копию). Веб-сервер будет создавать журналы, и мои веб-приложения будут управлять различными файлами и кэшами и т.д. Все эти файлы должны быть написаны за пределами контейнеров приложений (потому что я могу их заменить при обновлении?), Поэтому, куда они идут? Прямо в файловую систему хост-машин? Или в отдельный "объем докеров"? Если они входят в объемы докеров, я должен использовать отдельный том для базы данных, веб-сервера, приложения и т.д.? Могу ли я получить доступ к содержимому с помощью SFTP с моей локальной машины, как сейчас? Я не хочу потерять удобство здесь!
Полезно ли использовать Puppet для создания и управления контейнерами Docker как для сервера разработки, так и для производственного сервера?
Кажется, что Puppet поддерживает управление контейнерами Docker напрямую, поэтому это похоже на разумно хороший способ легко настроить сервер или производственную среду (используя Vagrant) с нуля.
Надеюсь, я задал несколько важных вопросов; было бы здорово получить некоторые надлежащие "лучшие практики" для разработки и производства LAMP-подобных веб-приложений, но, похоже, это не так много, что я нашел!