- PVSM.RU - https://www.pvsm.ru -
Здравствуйте, уважаемые читатели хабра. Сегодня мы поговорим о Windocks [1]–продукте компании с одноименным названием, позиционирующем себя как первый движок докер для Windows. Пока клиенты майкрософт ожидают новую версию Windows Server, а именно Windows Server 2016 (на момент написания статьи доступна версия Technical Preview 5 [2]) с нативной поддержкой докер-контейнеров [3], создатели windocks попытались предоставить докер-контейнеры для текущего поколения серверных систем windows.
Итак, что же такое Windocks? Если коротко — это смесь портированной версии существующего демона докер и open source container project [4] от Uhuru Software [5]. Об особенностях Windocks и вызовах, которые стояли перед разработчиками, можно почитать тут [6].
В рамках данного материала мы попробуем разобраться, чем работа с windocks принципиально отличается от работы с оригинальным демоном для linux [7], какие у текущей версии windocks ограничения и стоит ли внедрять инструмент в свои процессы разработки и тестирования.
На момент написания статьи windocks поддерживает следующие ОС:
В этих ОС можно создавать контейнеры из образов:
Совсем недавно [8] Windocks объявили о релизе community edition, для того чтобы можно было бесплатно ознакомиться с возможностями продукта. Эту версию мы и будем разворачивать. Отправляем запрос через форму на сайте [9]. Ответ приходит мгновенно, и через минуту ссылка уже у нас.
В качестве окружения для развертывания windocks будем использовать VPS [10] с конфигурацией 2x2.6ГГц, 2Гб RAM, 20Гб HDD / Windows Server 2012 R2. Для того, чтобы использовать SQL Server контейнеры на
Сгенерируем сертификаты и ключи [12] для хоста и для клиента, чтобы настроить двустороннюю аутентификацию и предоставим их windocks:
server-key.pem -> C:UsersAdministrator.dockerkey.pem
server-cert.pem -> C:UsersAdministrator.dockercert.pem
ca.pem -> C:UsersAdministrator.dockerca.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 [13]. Это означает, что для работы с ним можно использовать стандартного консольного клиента докер [14]. Однако, windocks на данный момент поддерживает не все команды, а только их часть. [14] В DockerFile также поддерживается ограниченный набор комманд (FROM, ADD, COPY, ADDDB, MOUNTDB). Полный список комманд для сравнения вы можете найти тут [15].
Подключаемся к 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 version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): windows/amd64
Server version: $VERSION
Server API version: 1.19
Go version (server): go1.5.1
Git commit (server): $GITCOMMIT
OS/Arch (server): windows/amd64
У 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:dcrmountDbExamplecustomerdata.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 mountDbExamplecustomerdata.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. А вы как считаете, уважаемые читатели?
Автор: RUVDS.com
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/administrirovanie/147460
Ссылки в тексте:
[1] Windocks: https://windocks.com/
[2] Technical Preview 5: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview
[3] нативной поддержкой докер-контейнеров: http://www.infoworld.com/article/2973492/application-virtualization/windows-server-containers-arrive-with-docker-support.html
[4] open source container project: https://windocks.com/blog-2/windows-server-2012-containers/
[5] Uhuru Software: https://github.com/UhuruSoftware
[6] тут: https://windocks.com/blog-2/docker-windows
[7] оригинальным демоном для linux: https://docs.docker.com/engine/installation/linux/
[8] Совсем недавно: http://www.prweb.com/releases/2016/06/prweb13478472.htm
[9] форму на сайте: https://windocks.com/leads/add?src=downloadcommunity
[10] VPS: http://ruvds.com
[11] VPS: https://www.reg.ru/?rlink=reflink-717
[12] Сгенерируем сертификаты и ключи: https://docs.docker.com/engine/security/https/
[13] docker RESTful api: https://docs.docker.com/engine/reference/api/docker_remote_api/
[14] стандартного консольного клиента докер: https://windocks.com/lps/reference
[15] тут: https://docs.docker.com/engine/reference/builder/
[16] Источник: https://habrahabr.ru/post/304508/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.