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