Asp net docker linux

Dockerize an ASP.NET Core application

Estimated reading time: 4 minutes

Introduction

This example demonstrates how to dockerize an ASP.NET Core application.

Why build ASP.NET Core?

  • Open-source
  • Develop and run your ASP.NET Core apps cross-platform on Windows, MacOS, and Linux
  • Great for modern cloud-based apps, such as web apps, IoT apps, and mobile backends
  • ASP.NET Core apps can run on .NET Core or on the full .NET Framework
  • Designed to provide an optimized development framework for apps that are deployed to the cloud or run on-premises
  • Modular components with minimal overhead retain flexibility while constructing your solutions

Prerequisites

This example assumes you already have an ASP.NET Core app on your machine. If you are new to ASP.NET you can follow a simple tutorial to initialize a project or clone our ASP.NET Docker Sample.

Create a Dockerfile for an ASP.NET Core application

Method 1:

  1. Create a Dockerfile in your project folder.
  2. Add the text below to your Dockerfile for either Linux or Windows Containers. The tags below are multi-arch meaning they pull either Windows or Linux containers depending on what mode is set in Docker Desktop for Windows. Read more on switching containers.
  3. The Dockerfile assumes that your application is called aspnetapp . Change the Dockerfile to use the DLL file of your project.
  1. To make your build context as small as possible add a .dockerignore file to your project folder and copy the following into it.

Method 2 (build app outside Docker container):

  1. Create a Dockerfile in your project folder.
  2. Add the text below to your Dockerfile for either Linux or Windows Containers. The tags below are multi-arch meaning they pull either Windows or Linux containers depending on what mode is set in Docker Desktop for Windows. Read more on switching containers.

The Dockerfile assumes that your application is called aspnetapp . Change the Dockerfile to use the DLL file of your project. This method assumes that your project is already built and it copies the build artifacts from the publish folder. Refer to the Microsoft documentation on Containerize a .Net Core app.

The docker build step here will be much faster than method 1, as all the artifacts are built outside of the docker build step and the size of the base image is much smaller compared to the build base image.

This method is preferred for CI tools like Jenkins, Azure DevOps, GitLab CI, etc. as you can use the same artifacts in multiple deployment models if Docker isn’t the only deployment model being used. Additionally, you’ll be able to run unit tests and publish code coverage reports, or use custom plugins on the artifacts built by the CI.

Источник

Сборка приложений ASP.NET Core, развернутых как контейнеры Linux в оркестраторе AKS/Kubernetes

Служба Azure Kubernetes (AKS) представляет собой службы оркестрации управляемой среды Kubernetes в Azure, упрощающие развертывание контейнеров и управление ими.

Основные функции AKS:

  • Размещенный в Azure уровень управления
  • Автоматические обновления
  • самовосстановление;
  • Настраиваемое пользователем масштабирование
  • Упрощение взаимодействия с пользователем для разработчиков и операторов кластера.

В приведенных ниже примерах рассматривается создание приложения ASP.NET Core 5.0, которое выполняется в Linux и развертывается в кластере AKS в Azure, при этом его разработка осуществляется в Visual Studio 2019 версии 16.8.

Создание проекта ASP.NET Core с помощью Visual Studio 2019

ASP.NET Core — это универсальная платформа разработки, которая поддерживается корпорацией Майкрософт и сообществом .NET на сайте GitHub. Она является кроссплатформенной, поддерживает Windows, Mac OS и Linux и может использоваться на устройствах, в облаке, во внедренных системах и в сценариях Интернета вещей.

В этом примере используется пара простых проектов, основанных на шаблонах Visual Studio, поэтому не требуется много дополнительных знаний для создания примера. Вам достаточно создать проект с помощью стандартного шаблона, который включает в себя все элементы для запуска небольшого проекта с помощью REST API и веб-приложение с Razor Pages, использующее технологии ASP.NET Core 5.0.

Рис. 4-35. Создание веб-приложения ASP.NET Core в Visual Studio 2019.

Чтобы создать пример проекта в Visual Studio, выберите Файл > Создать > Проект, укажите тип проекта Интернет и затем выберите шаблон Веб-приложение ASP.NET Core. При необходимости можно также выполнить поиск шаблона.

Затем введите имя и расположение приложения, как показано на следующем рисунке.

Рис. 4-36. Введите имя и расположение проекта в Visual Studio 2019.

Убедитесь, что выбрана платформа ASP.NET Core 5.0. Платформа .NET 5.0 включена в последнюю версию продукта Visual Studio 2019 и автоматически устанавливается и настраивается при его установке.

Рис. 4-37. Выбор ASP.NET CORE 5.0 и типа проекта «Веб-API»

Обратите внимание, что поддержка Docker сейчас не включена. Вы включите ее в следующем шаге после создания проекта.

Чтобы показать, что вы можете реализовать поддержку Docker в проекте в любое время, добавьте поддержку Docker сейчас. Щелкните узел проекта правой кнопкой мыши в обозревателе решений и выберите в контекстном меню пункт Добавить > Поддержка Docker.

«Поддержка Docker».» data-linktype=»relative-path»/>

Рис. 4-38. Добавление поддержки Docker в существующий проект

Чтобы завершить добавление поддержки Docker, можно выбрать платформу Windows или Linux. В данном случае это Linux.

Рис. 4-39. Выбор контейнеров Linux.

Выполнив эти простые шаги, вы запустите свое приложение ASP.NET Core 5.0 в контейнере Linux.

Аналогичным образом можно добавить очень простой проект WebApp (рис. 4-40) для использования конечной точки веб-API, хотя здесь это не рассматривается.

После этого вы добавите поддержку оркестратора для проекта WebApi, как показано далее на рисунке 4-40.

Рис. 4-40. Добавление поддержки оркестратора в проект WebApi.

При выборе параметра Docker Compose , который подходит для локальной разработки, Visual Studio добавляет проект docker-compose с файлами docker-compose, как показано на рисунке 4-41.

Рис. 4-41. Добавление поддержки оркестратора в проект WebApi.

Эти исходные файлы похожи на следующие:

Чтобы приложение выполнялось с Docker Compose, необходимо внести несколько изменений в docker-compose.override.yml

Теперь приложение можно запустить с помощью клавиши F5 или кнопки Воспроизвести либо сочетания клавиш CTRL + F5, выбрав проект docker-compose, как показано на рисунке 4-42.

Рис. 4-42. Добавление поддержки оркестратора в проект WebApi.

При выполнении приложения docker-compose, как описано ниже, вы получаете следующее:

  1. Созданные образы и контейнеры создаются в соответствии с файлом docker-compose.
  2. В браузере открывается адрес, настроенный в диалоговом окне «Свойства» для проекта docker-compose .
  3. Открывается окно Контейнер (в Visual Studio 2019 версии 16.4 и более поздней).
  4. Предоставляется поддержка отладчика для всех проектов в решении, как показано на следующих изображениях.

Рис. 4-43. Окно браузера с приложением, выполняющимся в нескольких контейнерах.

Рис. 4-44. Окно «Контейнеры» в Visual Studio

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

Как видно, интеграция между Visual Studio 2019 и Docker полностью ориентирована на обеспечение продуктивной работы разработчика.

Конечно, можно также вывести список образов с помощью команды docker images . Вы должны увидеть образы webapi и webapp с тегами dev , созданные при автоматическом развертывании вашего проекта с помощью Visual Studio 2019.

Рис. 4-45. Представление образов Docker

Регистрация решения в Реестре контейнеров Azure (ACR)

Вы можете отправить образы в Реестр контейнеров Azure (ACR), но можно также использовать Docker Hub или любой другой реестр, чтобы оттуда образы можно было развернуть в кластере AKS.

Создание экземпляра ACR

Выполните следующую команду из az cli:

Имя реестра контейнеров (например, exploredocker ) должно быть уникальным в пределах Azure и содержать от 5 до 50 буквенно-цифровых знаков. Дополнительные сведения см. в разделе Создание реестра контейнеров.

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

Теперь мы создадим образ в режиме Выпуск (готовом к выпуску), заменив значение на Выпуск, как показано на рис. 4-46, и запустив приложение, как и раньше.

Рис. 4-46. Выбор режима выпуска

При выполнении команды docker images вы увидите создание обоих образов — одного для режима debug (dev) и другого для режима release (latest).

Создание тега образа

Каждый образ контейнера должен быть помечен именем loginServer реестра. Данный тег используется для маршрутизации при отправке образов контейнеров в реестр образов.

Вы можете просмотреть имя loginServer на портале Azure, используя сведения из Реестра контейнеров Azure.

Рис. 4-47. Представление имени реестра

Кроме того, можно выполнить следующую команду:

Рис. 4-48. Получение имени реестра с помощью az cli

В обоих случаях вы получите нужное имя. В нашем примере это exploredocker.azurecr.io .

Теперь вы можете пометить образ, используя самый последний образ (образ выпуска), с помощью команды:

После выполнения команды docker tag выведите список образов с помощью команды docker images , при этом вы должны увидеть образ с новым тегом.

Рис. 4-49. Представление помеченных образов

Отправка образа в Azure ACR

Войдите в Реестр контейнеров Azure:

Отправьте образ в Реестр контейнеров Azure с помощью следующей команды:

Этой команде требуется некоторое время на отправку образа, при этом она предоставляет вам сведения о выполняемой операции. На следующем рисунке видно, что выходные данные одного изображения готовы, а другие еще выполняются.

Рис. 4-50. Выходные данные консоли для команды push.

Чтобы развернуть многоконтейнерное приложение в кластере AKS, потребуется несколько файлов манифеста, .yaml файлы, которые имеют большую часть свойств, взятых из файлов docker-compose.yml и docker-compose.override.yml .

deploy-webapi.yml

deploy-webapp.yml

Предыдущие файлы .yml включают только порты HTTP с помощью параметра ASPNETCORE_URLS , чтобы избежать проблем с отсутствующим сертификатом в примере приложения.

Сведения о том, как создать кластер AKS для этого примера, см. в разделе Развертывание в службе Azure Kubernetes (AKS) этого руководства.

Теперь почти все готово для развертывания с помощью kubectl, но сначала нужно получить учетные данные из кластера AKS с помощью следующей команды:

Рис. 4-51. Получение учетных данных из AKS в среду kubectl.

Также необходимо разрешить кластеру AKS получать образы из ACR с помощью следующей команды:

Выполнение предыдущей команды может занять несколько минут. Затем используйте команду kubectl apply для запуска развертываний, а затем — kubectl get all для получения списка объектов кластера.

Рис. 4-52. Развертывание в Kubernetes

Подождите некоторое время, пока подсистема балансировки нагрузки не получит внешний IP-адрес, проверив kubectl get services , после чего приложение должно быть доступно по этому адресу, как показано на следующем рисунке:

Рис. 4-53. Развертывание в Kubernetes

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

Сначала необходимо создать ClusterRoleBinding с помощью следующей команды:

Чтобы запустить прокси-сервер, используйте следующую команду:

Окно браузера должно открыться в http://127.0.0.1:8001 с представлением, аналогичным следующему:

Рис. 4-54. Просмотр сведений о кластере Kubernetes

Источник

Читайте также:  Как включить drag and drop virtualbox linux
Оцените статью