Contents
Проблема
В связи с последними событиями, которые нельзя называть своим именем, возникла необходимость переноса некоторых решений из 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 публичный ключ. Не понятно зачем сервисный аккаунт, но без ничего не работает.
Создаем и запускаем виртуальную машину.
Итог
Публикация прошла успешно, теперь можно добавлять более сложные сценарии с использованием базы данных или с использованием групп виртуальных машин для большей надежности.
--Andrey Paltusov--
comments powered by Disqus