Публикация приложений .NET Core в Яндекс.Облако

Posted by     "Andrey Paltusov" on Thursday, April 14, 2022

Оглавление

Проблема

   В связи с последними событиями, которые нельзя называть своим именем, возникла необходимость переноса некоторых решений из Azure в Яндекс облако.

   Одним из самых востребованных потенциальных сценариев пока является использование .NET Core в облаке Яндекс. К сожалению, у Яндекса нет веб-приложений как отдельного сервиса, поэтому пришлось попутно вникнуть в Docker. Об этом есть достаточно подробная статья от самого Яндекс и я решил пройти этот путь сначала самостоятельно, без использования Visual Studio (VS), а потом с использованием стандартных механизмов публикации, встроенного в среду разработки.

   В качестве эксперимента возьмем простое .NET Core веб приложение, создадим образ в докер и запустим докер контейнер на виртуальной машине под управлением Linux. Общая схема изображена ниже.

Подготовка

   Прежде всего для работы с Яндекс облаком понадобится подписка и Yandex Cloud (CLI). После установки консоли, нужно получить токен аутентификации. Сохраните его куда-то. Затем поставьте Docker Desktop. Возможно придется включить поддержку виртуализации.

   Создадим простое .NET Core 3.0 приложение

Сборка и публикация образа вручную (для тех, кто хочет помучиться)

   К счастью, часть работы студия все-таки сделала и у нас есть файл Dockerfile, который поможет нам собрать образ и поместить в него наше приложение.

Заходим консолью в папку с этим файлом и запускаем команду на сборку.

docker build -t testyandexcore2 .

Обратите внимание на точку в конце!

Запустим локально контейнер на основе нашего образа и «прокинем» 80 порт наружу.

docker run -p 80:80 -d testyandexcore2

команда

docker ps

покажет список рабочих контейнеров

Проверим, доступно ли приложение локально http://localhost/

Отлично, оно работает! Теперь нужно подключить «container registry» от Яндекс и опубликовать туда наш образ. Выполните пункты 1 и 2 руководства. Возможно, потребуется перезапустить консоль.

yc container registry create --name test-registry
yc container registry configure-docker

В облаке должен появится раздал для докер образов.

Теперь нужно присвоить правильный тэг нашему образу для публикации в Яндекс. Это пункт 4 руководства.

docker tag testyandexcore2 cr.yandex/crp*******/testyandexcore2:test

Публикуем образ

docker push cr.yandex/crp*******/testyandexcore2:test

Публикация образа из студии

   В меню публикации выбираем реестр контейнеров докер

Вставляем сохраненный токен аутентификации Яндекс в поле, выделенное красным. Публикуем

Быстро, просто, но не интересно.

Создаем виртуальную машину с контейнером

   Идем в раздел виртуальных машин

Создаем новую и прописываем в нее ссылку на наш образ

Важно задать сервисный аккаунт и ssh публичный ключ. Не понятно зачем сервисный аккаунт, но без ничего не работает.

Создаем и запускаем виртуальную машину.

Итог

   Публикация прошла успешно, теперь можно добавлять более сложные сценарии с использованием базы данных или с использованием групп виртуальных машин для большей надежности.

--Андрей Палтусов--


comments powered by Disqus