Я маю на увазі, що докер може значно покращити мій робочий процес webdev - але я не зовсім спромігся обгорнути голову, як підійти до проекту, додавши до стека докер.
Основний стек програмного забезпечення виглядатиме так:
Програмне забезпечення
Зображення докера, що забезпечують власні стеки LAMP
- Apache з декількома модулями
- MYSQL
- PHP
- Деякі CMS, наприклад, Silverstripe
GIT
Робочий процес
Я можу уявити, що робочий процес виглядає приблизно так:
Розвиток
- Напишіть,
Dockerfile
що визначає LAMP-контейнер, що відповідає вимогам, зазначеним вище- REQ: Машина повинна запустити apache / mysql відразу після завантаження
- Побудуйте зображення докера
- Скопіюйте файли, необхідні для запуску CMS, наприклад
~/dev/cmsdir
- Покладіть
~/dev/cmsdir/
під контроль версій
- Покладіть
- Запустіть контейнер докера та якось змонтуйте
~/dev/cmsdir
його/var/www/
на контейнері - Населяйте базу даних
- Робіть роботу в
/dev/cmsdir/
- Включити та вимкнути контейнер докера
Розгортання
- Налаштування віддаленого хоста (наприклад, з ansible)
- Надішліть зображення контейнера на віддалений хост
- Fetch
cmsdir
-проект через git - Запустіть контейнер докера, затягніть базу даних і вставте
cmsdir
в неї/var/www
Зараз це виглядає на папері все досить приємно, Але я не зовсім впевнений, чи це взагалі був би правильний підхід.
Запитання:
Під час розробки локально, як я можу змусити базу даних зберігатись між перезавантаженнями екземпляра контейнера? Або мені потрібно запускати sql-dump кожен раз, перш ніж вивертати контейнер?
Чи потрібно мати окремі екземпляри контейнерів для db та апаш-сервера? Чи достатньо було б мати один контейнер для цього випадку?
Якщо я використовую окремі контейнери для бази даних та сервера, то як я можу автоматизувати їх одночасно і назад?
Як я насправді монтуюсь
/dev/cmsdir/
у контейнери/var/www/
-директорію? Чи варто використовувати для цього обсяги даних ?Я пропустив якісь підводні камені? Що-небудь, що можна спростити?