2016-02-10 8 views
0

Я только что закончил настройку среды разработки, где все разработчики/функции/,/bugfix/ и/hotfix/* ветви git автоматически создаются и развертываются в свежезаваренном Windows Container, в котором размещается webapp и сервисы, создающие тестовую среду, для каждой ветви, которая должна быть проверена до слияния с мастером.Docker Like DB Deployment

Хотя это работает довольно хорошо, у меня все еще есть только 1 dev db для разработчика, который используется всеми их ветвями.

В идеальном мире я бы хотел, чтобы каждый из этих тестовых контейнеров использовал свой изолированный экземпляр db, однако db в настоящее время находится на уровне около 50 гб при наименьшем из них, я могу получить его, не отрываясь от исторических данных, которые когда-то полезно.

Что бы я хотел сделать, это создать изображение для docker для этого db, а затем создать новый «контейнер» из этого изображения, который отслеживает разницу между его изменениями оригинала без изменения оригинала дб.

Возможно, что-то вроде этого возможно или у кого-нибудь есть идеи, как я мог бы достичь этой изоляции db, для каждого контейнера без необходимости создавать полный бит 50 гб для каждого?

+1

базов данных снимков? – ErikEJ

+0

Даже если у вас был Docker, как бы вы разложили * данные в базе данных *? Это та часть, которую Docker не может обработать и не пытается - управляет данными. Для этого вы можете использовать моментальные снимки базы данных и/или дифференциальные резервные копии/восстановления. –

+0

@VonC, любой намек? –

ответ

0

Хорошо, поэтому, после многократного крушения в темноте, я думаю, что я наконец придумал решение. @ErikEJ, спасибо, ты начал меня в правильном направлении. Посмотрев на моментальные снимки БД на MSSQL, я обнаружил, что единственный способ делать записи с записью снимков, казалось, использовал vss и фактически создавал моментальные снимки записываемых дисков. Это тоже привело меня к длинному пути, сначала пробуя локально, и потерпив неудачу, а затем попытался реализовать iscsi и по-прежнему никуда не выходить. Затем я наткнулся на снимки гипер-v и посмотрел, что там происходит под капотом, и, наконец, наткнулся на создание разных VHD. Таким образом, в основном мое решение выглядит следующим образом.

Создайте VHD с дезинфицированной копией моего производственного DB mdf и ldf файла. Затем я создаю разностные vhds для каждой среды, в которой я нуждаюсь, монтируйте разностные vhds каждый в своей собственной папке, например c: \ db \ Issue-1234 и создайте новый DB DB_ISSUE-1234, отправив файлы в эти папки. Затем сохраняются только разности и вместо нескольких копий db. У меня только 1, а затем разностные vhds сохраняют только разницу.

Я только что получил эту работу с 2 или 3, поэтому не уверен, насколько это устойчиво и насколько быстро эти разностные VHD будут расти, но пока очень перспективны и позволяют мне развернуть несколько сред для (на самом деле все автоматизировано сценариями при развертывании).

Надеется, что это, возможно, поможет кому-то еще сэкономить некоторое время один день и, пожалуйста, дайте мне знать, если кто-то придумал более эффективный/быстрее/лучший способ сделать это :)