У меня есть догадка, что docker может значительно улучшить рабочий процесс webdev, но мне не удалось обойти вокруг того, как подходить к добавлению проекта докер в стек.
Основной стек программного обеспечения будет выглядеть следующим образом:
Программное обеспечение
-
Изображение Docker, предоставляющее пользовательский стек LAMP
- Apache с несколькими модулями
- MYSQL
- PHP
- Некоторые CMS, например. Silverstripe
-
GIT
Workflow
Я мог представить, что рабочий процесс выглядит примерно следующим образом:
Разработка
- Напишите
Dockerfile
, который определяет LAMP-контейнер, отвечающий требованиям, указанным выше- REQ: машина должна запустить apache/mysql сразу после загрузки.
- Создайте изображение докеров
- Скопировать файлы, необходимые для запуска CMS, например.
~/dev/cmsdir
- Поместите
~/dev/cmsdir/
под управлением версиями
- Поместите
- Запустите контейнер докеров и как-то монтируйте
~/dev/cmsdir
в/var/www/
в контейнере - Заполнение базы данных
- Работайте в
/dev/cmsdir/
- Фиксировать и закрывать контейнер докеров
Развертывание
- Настройка удаленного хоста (например, с невозможным)
- Нажмите изображение контейнера на удаленный хост.
- Fetch
cmsdir
-project через git - Запустите контейнер докеров, потяните в базу данных и установите
cmsdir
в/var/www
Теперь это выглядит неплохо на бумаге, но я не совсем уверен, что это будет правильный подход.
Вопросы:
-
При разработке локально, как я могу заставить базу данных сохраняться между перезагрузками экземпляра контейнера? Или мне нужно будет запускать sql-dump каждый раз, прежде чем откручивать контейнер?
-
Должен ли я иметь отдельные экземпляры контейнера для db и сервера apache? Или было бы достаточно, чтобы иметь один контейнер для вышеуказанного варианта использования?
-
Если вы используете отдельные контейнеры для базы данных и сервера, как я могу автоматизировать их одновременное форматирование?
-
Как я смогу монтировать
/dev/cmsdir/
в контейнер/var/www/
-directory? Должен ли я использовать данные-тома для этого? -
Я пропустил какие-то подводные камни? Все, что можно упростить?