Каким будет хороший рабочий процесс докеров webdev?
У меня есть догадка, что docker может значительно улучшить рабочий процесс webdev, но мне не удалось обойти вокруг того, как подходить к добавлению проекта докер в стек.
Основной стек программного обеспечения будет выглядеть следующим образом:
Программное обеспечение
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? Должен ли я использовать данные-тома для этого?
-
Я пропустил какие-то подводные камни? Все, что можно упростить?
Ответы
Ответ 1
-
Если вам нужна стойкость базы данных к вашему контейнеру CMS, вы можете использовать один контейнер для MySQL и один контейнер для вашей CMS. В таком случае вы можете запустить свой контейнер MySQL, и вы можете повторно развернуть свою CMS так часто, как хотите независимо.
Для разработки - другой вариант - сопоставить каталоги данных mysql с вашего компьютера хоста/разработки с использованием томов данных. Таким образом вы можете управлять файлами данных для mysql (в докере) с помощью git (на хосте) и "перезагрузить" начальное состояние в любое время (перед запуском контейнера mysql).
-
Да, я думаю, у вас должен быть отдельный контейнер для db.
-
Я использую только базовый script:
#!/bin/bash
$JOB1 = (docker run ... /usr/sbin/mysqld)
$JOB2 = (docker run ... /usr/sbin/apache2)
echo MySql=$JOB1, Apache=$JOB2
-
Да, вы можете использовать модули данных -v. Я бы использовал это для развития. Вы можете использовать установку только для чтения, поэтому вы не должны вносить изменения в этот каталог, если хотите (ваше приложение должно хранить данные где-то в другом месте).
docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
В любом случае, для окончательного развертывания, я бы построил и образ с помощью файла docker с помощью ADD /home/user/dev/cmsdir /var/www/cmsdir
-
Я не знаю:-)
Ответ 2
Вы хотите использовать docker-compose. Следуйте инструкциям здесь. Очень просто. Кажется, отметьте все ваши поля.
https://docs.docker.com/compose/
Ответ 3
Я понимаю, что эта должность старше года, но я недавно задал себе очень похожие вопросы и получил несколько отличных ответов на ваши вопросы.
-
Вы можете настроить экземпляр docker MySQL и сохранить данные в контейнере данных без состояния, так как контейнер данных не должен активно запускаться
-
Да, я бы рекомендовал иметь отдельный экземпляр для вашего веб-сервера и базы данных. Это сила Докера.
-
Отметьте это репо, которое я создаю. В основном это так же просто, как make build
и make run
, и вы можете иметь локальный веб-сервер и контейнер базы данных.
-
Вы используете аргумент -v
при запуске контейнера в первый раз, это свяжет конкретную папку в контейнере с хостом, запускающим контейнер.
-
Я думаю, что ваши идеи велики, и в настоящее время можно достичь всего, что вы просите.
Вот решение под ключ, которое обеспечивает все перечисленные вами потребности.
Ответ 4
Я собрал простую в использовании компоновку docker compose, которая должна соответствовать требованиям рабочего процесса разработки.
https://github.com/ehyland/docker-silverstripe-dev
Основные функции
- Постоянная БД
- Ваш выбор
HHVM
+ NGINX
или Apache2
+ PHP5
- Отладка и установка контрольных точек с помощью xDebug
README.md должен быть достаточно ясным, чтобы вы начали.