Запуск и остановка контейнера Docker из функции Azure на основе ввода - PullRequest
1 голос
/ 01 февраля 2020

Мне было интересно, есть ли какой-нибудь способ достичь следующего на облачной платформе Azure:

  1. Запустить контейнер Docker (Azure Экземпляры контейнеров) из функции Azure с кодом C# на основе входных параметров и файла, отправленного в функцию Azure.

  2. После запуска контейнера программное обеспечение внутри контейнера имеет чтобы начать выполнять некоторую работу на основе входного файла и параметров, которые были отправлены в функцию Azure.

  3. После того, как программное обеспечение внутри контейнера Docker выполнено и записано в какую-либо базу данных (MS SQL Сервер также в Azure), функция Azure должна остановить контейнер (также может быть другая функция Azure, которая опрашивает, например, раз в минуту, чтобы проверить, не выполняется ли работа с любым изображением Docker).

  4. Если есть запросы, поступающие к функции Azure, когда контейнер Docker в данный момент запущен и работает, функции раскручивают новый контейнер Docker из того же изображения и делают то же самое.

Причиной необходимости запуска и остановки контейнера Docker является снижение затрат из-за высокой рабочей нагрузки, для которой требуется экземпляр, использующий несколько ядер ЦП и много ОЗУ.

1 Ответ

1 голос
/ 01 февраля 2020

В вашей функции вы можете запускать и останавливать контейнеры в ACI с помощью Microsoft. Azure .Management.ContainerInstance Пространство имен в C#. Вот ссылка на пакет Nuget и пример, который я нашел:

var containerGroup = azure.ContainerGroups.Define(containerGroupName)
    .WithRegion(azureRegion)
    .WithExistingResourceGroup(resourceGroupName)
    .WithLinux()
    .WithPublicImageRegistryOnly()
    .WithoutVolume()
    .DefineContainerInstance(containerGroupName)
         .WithImage(containerImage)
         .WithExternalTcpPort(80)
         .WithCpuCoreCount(1.0)
         .WithMemorySizeInGB(1)
         .Attach()
    .WithDnsPrefix(containerGroupName)
    .Create();

Есть много способов достичь своей цели. Вместо использования функций вы можете использовать приложение Logi c для запуска и остановки контейнеров в ACI с использованием ACI-разъема . Можно подумать о рабочем процессе, подобном следующему:

  • Добавить действие, которое вызовет приложение Logi c, как новое сообщение в очереди.
  • Создать группу контейнеров ACI используя соединитель.
  • Запустите контейнер в ACI, используя соединитель.
  • Вы можете наблюдать за состоянием контейнера, чтобы убедиться, что он был успешно создан.
  • Можно передать значения в Контейнер путем установки переменных env с помощью соединителя ACI, например, имени файла или номера задания.
  • Вы добавляете все oop, которые следят за завершением вашего кода в контейнере (вывод, который вы отправляете в журнале)
  • Вы удаляете ACI, используя соединитель

Конечно, вы можете запускать несколько приложений Logi c параллельно.

...