Заметки консультанта

Шамрай Александр Владимирович

Posts Tagged ‘docker-compose’

Развертывание решения с помощью Docker, Azure Container Registry и Visual Studio Team Services

Posted by Shamrai Alexander на 5 июля, 2017

Данная публикация показывает, как можно настроить среду развертывания и тестирования с использованием Docker в Visual Studio Team Services. Общий процесс можно просмотреть здесь: https://www.youtube.com/watch?v=yrqy5PKrNao

Краткое описание тестируемого решения

Для тестирования процедуры используется следующее демонстрационное решение. Решение позволяет выполнять произвольные запросы к двум тестовым базам данных через консольное приложение-клиент. При этом префикс ‘TST1=>’ и ‘TST2=>’ маршрутизирует запрос к соответствующей базе.

Решение состоит из следующих проектов:

  1. FirstServiceApp – решение, которое запускает первый само-размещаемый WCF сервис. При этом запуск сервиса выполняется через nugget пакет TopShell.
  2. SecondServiceApp – решение, которое запускает второй само-размещаемый WCF сервис.
  3. WcfFirstService – первый WCF сервис, который работает с первой базой данных.
  4. WcfSecondService – второй WCF сервис, который работает со второй базой данных.
  5. WcfWebApp – основной WCF сервис, который размещается на IIS и взаимодействует с первым и вторым WCF сервисами, предоставляя соответствующие методы.
  6. WcfWebAppClient – клиентское приложение для основного WCF сервиса.

Архитектура решения следующая:

Рисунок 1. Архитектура решения

Последовательность использования решения на месте разработчика

Особенностью использования в данном режиме является то, что вся среда настроена на работу в сети NAT локального компьютера.

Примечание. Шаги приведены с учетом, что использует рабочее место в ажуре на основе Windows Server 2016 with containers, на котором развернуты VS 2015 и SQL Server 2016. Для работы сервисов необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»

Шаги развертывания и запуска решения:

  • Распаковать архив решения в необходимо место.
  • Обновить информацию о сетевых настройках.
    • Выполнить команду получения информации о сети:

docker network inspect nat

  • Получить информацию о используемой подсети и шлюзе. Пример части ответа предыдущей команды:


«IPAM»: {

«Driver»: «windows»,

«Options»: null,


«Config»: [

{

«Subnet»: «172.25.16.0/20»,

«Gateway»: «172.25.16.1»

}

]

},

  • Открыть разархивированный проект.
  • Обновить эту информацию в файлах hosts_dev.bat в проекте WcfWebAppClient и каталоге DockerCompose.

  • Обновить информацию в файле «docker-compose.yml».

  • Далее необходимо пересобрать проект, что создаст структуру для запуска контейнеров в каталоге «C:\DockerCompose»

  • На следующем шаге необходимо опубликовать веб-сайт из проекта «WcfWebApp».

  • Открыть командную строку и перейти в каталог «DockerCompose»

cd c:\DockerCompose

  • Запустить команду «docker-compose» для сборки образов:

docker-compose build

  • Запустить команду «docker-compose» для запуска сервисов:

docker-compose up -d

  • Проверить работоспособность сервисов можно через команду «docker-compose ps»

  • Чтобы подключиться к сервисам и проверить работу необходимо запустить решение WcfWebAppClient из сборки отладочного каталога (bin/Debug). При этом нужно проверить ip-адрес подключения к основному сервису в файле настройки, чтоб он соответствовал подсети, которая настроена для сети nat (шаг 2).

Последовательность использования решения при непрерывной интеграции

Общая архитектура решения отражена на рисунке ниже:

Описание решения:

  1. Исходный код размещается на Visual Studio Team Services в репозитории GIT или TFVC.
  2. Разработчик подключается VSTS и изменяет исходный код.
  3. После регистрации изменений выполняется автоматический запуск процесса сборки на сервере Build Server. На сервере сборки выполняется:
    1. Сборка исходного кода/выполнение модульных тестов.
    2. Сборка образов для контейнеров.
    3. Публикация образов на приватном сервере реестра контейнеров Azure Registry Server.
  4. (Данный шаг может выполняться в режиме непрерывного развертывания) Разработчик выполняет создание нового релиза, что запускает выполнение следующих шагов:
    1. Скачивание образов из приватного сервера реестра
    2. Запуск сервисов на Stage Server.

Примечание. Шаги приведены с учетом, что:

  1. Создан проект в Visual Studio Team Services. https://www.visualstudio.com/en-us/docs/setup-admin/create-team-project
  2. Установлен агент сборки: https://www.visualstudio.com/en-us/docs/build/concepts/agents/agents
  3. Build и Stage Server развернуты в ажуре на основе Windows Server 2016 with containers.
  4. На Build и Stage Server необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»
  5. На Build Server развернута VS 2015
  6. На Stage Server развернут SQL Server 2016 и развернуты базы TestDB и TestDB1.

Шаги развертывания и запуска решения:

  • Решение для примера распаковывается и ставить под версионный контроль проекта в Visual Studio Team Services.
  • На Stage Server необходимо просмотреть настройки сети и обновить их в файлах «hosts.bat» и «docker-compose_prod.yml». См. Раздел 3.2, шаг 2.
  • Настраивается новая сборка для решения, в которой настраиваются следующие шаги:
    • Шаг непосредственной сборки решения:

  • Публикация сайта с сервисом в запакованном zip архиве

Аргументы: /p:OutDir=$(build.stagingDirectory)/package /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true

  • Копирование результатов сборки решения.

  • Копирование результатов сборки сайта в общий каталог результатов

  • Копирование результатов сборки сайта в рабочий каталог для формирования контейнера.

  • Запуск скрипта для обновления информации настроек Application Insights и докера.

  • Публикация результатов сборки на сервер TFS.

  • Запуск скрипта для сборки контейнеров и публикации на приватный реестр.

  • Для сборки настраиваются переменные для подключения к приватному реестру контейнеров. Имя сервера нужно обновить в самом файле «publish.bat»:

  • Настраивается релиз, который на основе сборки формирует контейнеры с сервисами. Пример шагов для среды развертывания:
    • Копирование исходного файла настройки «docker-compose_src.yml» для запуска сервисов.

  • Запуск скрипта для генерирования правильного конфигурационного файла для контейнеров.

  • Запуск командной строки для подключения к удаленному реестру контейнеров.

  • Запуск командной строки для сборки и запуска набора контейнеров

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , , , | Leave a Comment »

Работа с контейнерами и сервисами на основе Docker и Visual Studio Team Services

Posted by Shamrai Alexander на 22 марта, 2017

Posted in Microsoft, Team Foundation Server, Visual Studio | Отмечено: , , , , , | Leave a Comment »