В марте 2013 года Соломан Хайкс объявил о старте открытого проекта, впоследствии ставшего известным как Docker. В последующие месяцы его активно поддержало сообщество Linux, а осенью 2014 года Microsoft объявила о планах реализации контейнеров в Windows Server 2016. Компания WinDocks, соучредителем которой я являюсь, выпустила независимую версию открытого кода Docker для Windows в начале 2016 года с акцентом на первоклассную поддержку контейнера в SQL Server. Контейнеры быстро становятся центром внимания в отрасли. В этой статье мы рассмотрим контейнеры и их использование разработчиками и администраторами баз данных SQL Server
Принципы организации контейнеров
Контейнеры определяют новый метод упаковывания приложений, в сочетании с изоляцией пользователей и процессов, для мультиабонентских приложений. Различные реализации контейнеров для Linux и Windows существуют уже много лет, но с выходом Windows Server 2016 мы получили фактический стандарт Docker. Сегодня API-интерфейс и формат контейнера Docker поддерживаются в общедоступных службах AWS, Azure, Google Cloud, всех дистрибутивах Linux и Windows. У элегантной структуры Docker есть важные преимущества.
- Переносимость. Контейнеры содержат программные зависимости приложений и выполняются неизменными на ноутбуке разработчика, общем тестовом сервере и в любой общедоступной службе.
- Экосистема контейнеров. API-интерфейс Docker является средоточием отраслевых новинок с решениями для мониторинга, ведения журнала, хранения данных, оркестровки кластеров и управления.
- Совместимость с общедоступными службами. Контейнеры спроектированы для архитектуры микрослужб, горизонтального масштабирования и временных рабочих нагрузок. Контейнеры проектируются таким образом, чтобы их можно было при желании удалить и заменить, а не исправлять или обновлять.
- Скорость и экономия. Для создания контейнеров требуется несколько секунд; обеспечена эффективная поддержка мультиабонентности. У большинства пользователей количество виртуальных машин сокращается в три-пять раз (рисунок 1).
Рисунок 1. Сравнение архитектуры виртуальных машин и контейнеров |
Контейнеры SQL Server
SQL Server поддерживает мультиабонентность с применением именованных экземпляров в течение десяти лет, так в чем же ценность контейнеров SQL Server?
Дело в том, что контейнеры SQL Server более практичны благодаря их быстродействию и автоматизации. Контейнеры SQL Server представляют собой именованные экземпляры, с данными и настройками, подготавливаемые в течение нескольких секунд. Возможность создавать, удалять и заменять контейнеры SQL Server за считанные секунды позволяет более практично использовать их для разработки, контроля качества и других случаев применения, которые будут рассмотрены ниже.
Благодаря быстродействию и автоматизации контейнеры SQL Server идеальны для организации производственной среды разработки и контроля качества. Каждый член группы работает с изолированными контейнерами в общей виртуальной машине, с трех-пяти-кратным сокращением числа виртуальных машин. В результате мы получаем существенную экономию на обслуживании виртуальных машин и стоимости лицензий Microsoft. Контейнеры легко интегрировать в массивы сети хранения данных (SAN) с использованием реплик хранилища и клонов баз данных (рисунок 2).
Рисунок 2. Схема использования контейнеров SQL Server |
Подключенная база данных объемом 1 Тбайт формируется в экземпляре контейнера менее чем за одну минуту. Это значительное улучшение по сравнению с серверами с выделенными именованными экземплярами или предоставлением виртуальных машин для каждого разработчика. Одна компания использует восьмиядерный сервер для обслуживания до 20 контейнеров SQL Server по 400 Гбайт. В прошлом для подготовки каждой виртуальной машины требовалось более часа, а экземпляры контейнеров выдаются за две минуты. Таким образом, удалось в 20 раз сократить число виртуальных машин, уменьшить число ядер процессора в 5 раз и резко сократить расходы на оплату лицензий Microsoft. Кроме того, повысились гибкость и быстрота реагирования в бизнесе.
Применение контейнеров SQL Server
Контейнеры определяются с помощью сценариев Dockerfile, которые предусматривают конкретные шаги построения контейнера. Приведенный на экране 1 файл Dockerfile задает SQL Server 2012 с базами данных, копируемыми в контейнер, и скриптом SQL Server для маскирования выбранных таблиц.
Экран 1. Содержимое файла Dockerfile |
Каждый контейнер может содержать десятки баз данных со вспомогательными файлами и файлами журнала. Базы данных могут быть скопированы и выполнены в контейнере или подключены с помощью команды MOUNTDB.
Каждый контейнер содержит частную файловую систему, изолированную от ресурсов хоста. В приведенном на экране 2 примере контейнер строится с использованием MSSQL-2014 и venture.mdf. Формируются уникальный идентификатор ContainerID и порт контейнера.
Экран 2. Контейнер на базе SQL Server 2014 и venture.mdf |
Контейнеры SQL Server обеспечивают новый уровень быстродействия и автоматизации, но их поведение точно такое же, как у обычных именованных пространств. Управление ресурсами можно реализовать с помощью инструментария SQL Server или через пределы ресурсов контейнера (экран 3).
Экран 3. Управление ресурсами контейнера с помощью инструментария SQL Server |
Другие случаи применения
Контейнеры — самое распространенное средство организации среды для разработки и контроля качества, но появляются и другие области применения. Тестирование аварийного восстановления — простой, но многообещающий сценарий использования. Среди прочих — контейнеризация внутренней среды SQL Server для унаследованных приложений, таких как SAP или Microsoft Dynamics. Контейнеризованный внутренний компонент используется для предоставления рабочей среды для поддержки и текущего обслуживания. Применяются также оценочные контейнеры для поддержки рабочих сред с постоянными хранилищами данных. В одной из следующих статей я подробно расскажу о постоянных данных.
Компания WinDocks стремится еще более упростить использование контейнеров через веб-интерфейс. Другой проект сосредоточен на переносе контейнеров SQL Server в процессе DevOps или Continuous Integration с конвейерами CI/CD на основе Jenkins или Team City. Сегодня вы можете познакомиться с использованием контейнеров на всех редакциях Windows 8 и Windows 10, Windows Server 2012 или Windows Server 2016 с поддержкой всех выпусков, начиная с SQL Server 2008. с помощью вашей копии WinDocks Community Edition (https://www.windocks.com/community-docker-windows).