Windocks — SQL Server .NET контейнери на Windows Server 2012 R2 з підтримкою docker api



Здрастуйте, шановні читачі хабра. Сьогодні ми поговоримо про Windocks–продукт компанії з однойменною назвою, позиционирующем себе як перший движок докер для Windows. Поки клієнти microsoft очікують нову версію Windows Server, а саме Windows Server 2016 (на момент написання статті доступна версія Technical Preview 5 нативної підтримкою докер-контейнерів, творці windocks спробували надати докер-контейнери для поточного покоління серверних систем windows.

Отже, що ж таке Windocks? Якщо коротко — це суміш портований версії існуючого демона докер і open source container project Uhuru Software. Про особливості Windocks і виклики, які стояли перед розробниками, можна почитати тут.

В рамках даного матеріалу ми спробуємо розібратися, чим робота з windocks принципово відрізняється від роботи з оригінальним демоном для linux, які у поточній версії windocks обмеження і чи варто впроваджувати інструмент свої процеси розробки і тестування.

доступно зараз
На момент написання windocks підтримує наступні ОС:
  • Windows 8/8.1
  • Windows 10
  • Windows Server 2012 / Windows Server 2012 R2
  • Windows Server 2016


В цих ОС можна створювати контейнери з образів:
  • SQL Server 2016/2014/2012/2008 R2/2008
  • Net 4.5/3.5/2.0
  • Jenkins (агенти, демо за запитом)
  • Office conversion (для конвертації презентацій powerpoint у відео демо за запитом)
  • Microsoft Dynamics (лінійка ERP і CRM рішень, демо за запитом)


Развертываем windocks на VPS Windows Server 2012
Зовсім недавно Windocks оголосили про релізі community edition, для того щоб можна було безплатно ознайомитись з можливостями продукту. Цю версію ми і будемо розгортати. Відправляємо запит через форму на сайті. Відповідь приходить миттєво, і через хвилину посилання вже у нас.

В якості оточення для розгортання windocks будемо використовувати VPS з конфігурацією 2x2.6ГГц, 2Гб RAM, 20Гб HDD / Windows Server 2012 R2. Для того, щоб використовувати SQL Server контейнери на VPS необхідно встановити SQL Server. Встановлюємо, а потім ставимо і сам windocks. Ніяких додаткових налаштувань в процесі установки не потрібно.

Згенеруємо сертифікати і ключі для хоста і для клієнта, щоб налаштувати двосторонню аутентифікацію і надамо їх windocks:
server-key.pem -> C:\Users\Administrator\.docker\key.pem
server-cert.pem -> C:\Users\Administrator\.docker\cert.pem
ca.pem -> C:\Users\Administrator\.docker\ca.pem


Тепер запустимо windocks (команда запуску виглядає трохи інакше, ніж для демона докер на лінукс):
docker -H tcp://WINDOCKS_IP:2376 -dD --tlsverify=true


В логах запуску бачимо:
time="2016-06-30T14:32:06.901345300+03:00" level=info msg="Daemon has completed initialization"

Не забуваємо дозволити вхідні підключення на порт tcp 2376 в файрвол для потрібних ip-адрес.

Підключаємося за допомогою стандартного клієнта докер
Як ви напевно здогадалися по заголовку, Windocks підтримує docker RESTful api. Це означає, що для роботи з ним можна використовувати стандартного консольного клієнта докер. Однак, windocks на даний момент не підтримує всі команди, а лише їх частину. DockerFile також підтримується обмежений набір команд (FROM, ADD, COPY, ADDDB, MOUNTDB). Повний список команд для порівняння ви можете знайти на тут.

Підключаємося до windocks абсолютно також, як і до звичайного докер хосту (для роботи з клієнтом рекомендуємо створити аліаси команд, у windows це можна зробити, наприклад, за допомогою DOSKEY):
docker.exe --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=WINDOCKS_IP:2376 version


В результаті отримуємо щось на зразок:

Client version: 1.7.0
Client API версія: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): windows/amd64
Server version: $VERSION
Server API версія: 1.19
Go version (server): go1.5.1
Git commit (server): $GITCOMMIT
OS/Arch (server): windows/amd64


Запускаємо .NET додаток в windocks
У windocks свій локальний реєстр образів, який community addition за замовчуванням містить 2 образу: dotnet і mssql. Його вміст можна отримати, виконавши (вважаємо, що ми вже зробили аліас з параметрами для аутентифікації за допомогою сертифікатів):
docker images


Результат:


Отже, нам доступні 2 базових образу: dotnet-4.5 і mssql-2014. Разом з Windocks йде набір семплів, що демонструють його можливості.

В рамках статті ми розглянемо семпли testMountDb і testDotnet. Перший вмонтовує в контейнер, створений на основі образу mssql-2014, базу для тестової програми. Другий — використовує цю базу в роботі в іншому контейнері. Скопіюємо їх на клієнтську ОС, щоб здійснювати роботу безпосередньо за допомогою стандартного клієнта.

Зберемо контейнер з семпла testMountDb і запустимо його.
docker build testMountDb


Отримуємо наступне:

Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM mssql-2014
Step 1 : MOUNTDB customers C:\dcr\mountDbExample\customerdata.mdf
ContainerId = c4d6e4f7bdc9cfc4c8b62b09572b255f43b56716d862b28e291e7af86e08bc3f & ContainerPort = 10001 & ContainerUserName = prison_oo_aqRdapH & ContainerPassword = Pr!5n5A39SvNRo & MSSQLPort = 10001 & MSSQLServerUserName = sa & MSSQLServer
SaPassword = Pr!54q0flmqoM1 & DockerFile output: & Line 2 - Mounted DB: customers, C:\ dcr \mountDbExample\customerdata.mdf


Звідси нам знадобляться MSSQLServerUserName і SaPassword, які ми будемо використовувати у web.cfg у рядку підключення.
Запустимо створений контейнер:
docker start c4d


Тепер зберемо контейнер з семпла testDotnet і запустимо (все аналогічно):
docker build testDotnet


Результат:

SECURITY WARNING: You are building a Docker image from Windows against a Linux Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
Sending build context to Docker daemon 20.99 kB
Sending build context to Docker daemon
Step 0 : FROM dotnet-4.5
Step 1 : COPY web.config app-root\\runtime\\repo
Step 2 : COPY default.aspx app-root\\runtime\\repo
Step 3 : COPY default.aspx.cs app-root\\runtime\\repo
Step 4 : COPY main.css app-root\\runtime\\repo
Step 5 : COPY windockslogo.png app-root\\runtime\\repo
Step 6 : COPY testrun.bat .
Step 7 : RUN cmd.exe /C .\testrun.bat
ContainerId = 3b8cefeef04d3ac5010fa8e37b04ce42aa207359e4848581222d521839ea7a04 & ContainerPort = 10003 & ContainerUserName = prison_oo_P4yo5gA & ContainerPassword = Pr!5c6g8mVfQq7 & DOTNETPort = 10003 & DockerFile output: PS

docker start 3b8



Відкриваємо в браузері
http://WINDOCKS_IP:10003 
і, якщо все зроблено правильно, бачимо наступне:


Тепер збережемо образ додатка в реєстрі windocks, виконавши наступне:
docker commit a29 windocks_dotnet_demo_v1


І виведемо оновлений список образів:
docker images




Тепер образ windocks_dotnet_demo_v1 можуть використовувати і інші користувачі

Висновки
На наш погляд, незважаючи на те, що windocks досить обмежений (у чому його обмеження ми вказали на самому початку статті) інструмент в порівнянні з демоном докер для лінукс, він досить добре справляється зі своїми стандартними завданнями з надання SQL Server .NET контейнерів. Також його можна цілком комфортно використовувати для розробки й тестування додатків на ASP.NET 4.5 / MSSQL в невеликих командах, проте для використання в продакшені інструмент ще надто молодий і ще може стати неактуальним після релізу Windows Server 2016. А ви як вважаєте, шановні читачі?
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.