Меню Закрыть

Asp net core docker

Содержание

В следующих статьях содержатся сведения о размещении приложений ASP.NET Core в Docker. The following articles are available for learning about hosting ASP.NET Core apps in Docker:

Общие сведения о контейнерах и Docker Introduction to Containers and Docker
Узнайте о том, что контейнеризация — это подход к разработке программного обеспечения, при котором приложение или служба, их зависимости и конфигурация упаковываются вместе в образ контейнера. See how containerization is an approach to software development in which an application or service, its dependencies, and its configuration are packaged together as a container image. Образ можно протестировать и затем развернуть на узле. The image can be tested and then deployed to a host.

Что такое Docker? What is Docker
Узнайте, о том, что Docker — это проект с открытым исходным кодом для автоматизации развертывания приложений в виде переносимых автономных контейнеров, выполняемых в облаке или локальной среде. Discover how Docker is an open-source project for automating the deployment of apps as portable, self-sufficient containers that can run on the cloud or on-premises.

Терминология Docker Docker Terminology
Изучите термины и определения для технологии Docker. Learn terms and definitions for Docker technology.

Контейнеры, образы и реестры Docker Docker containers, images, and registries
Узнайте о хранении образов контейнеров Docker в реестре образов для согласованного развертывания в средах. Find out how Docker container images are stored in an image registry for consistent deployment across environments.

В этом руководстве показано, как запустить приложение ASP.NET Core в контейнерах Docker. This tutorial shows how to run an ASP.NET Core app in Docker containers.

В этом учебнике рассмотрены следующие задачи. In this tutorial, you:

  • узнаете о создании образов Docker для Microsoft .NET Core; Learn about Microsoft .NET Core Docker images
  • скачивание примера приложения ASP.NET Core; Download an ASP.NET Core sample app
  • локальное выполнение примера приложения; Run the sample app locally
  • выполнение примера приложения в контейнерах Linux; Run the sample app in Linux containers
  • выполнение примера приложения в контейнерах Windows; Run the sample app in Windows containers
  • локальная сборка и развертывание. Build and deploy manually

Образы Docker для .NET Core ASP.NET Core Docker images

Для работы с этим руководством следует скачать пример приложения ASP.NET Core и запустить его в контейнерах Docker. For this tutorial, you download an ASP.NET Core sample app and run it in Docker containers. Этот пример поддерживается в контейнерах Linux и Windows. The sample works with both Linux and Windows containers.

Пример файла Dockerfile использует функцию многоэтапной сборки Docker для сборки и выполнения в разных контейнерах. The sample Dockerfile uses the Docker multi-stage build feature to build and run in different containers. Контейнеры для сборки и выполнения создаются на основе образов, предоставленных корпорацией Майкрософт в Docker Hub: The build and run containers are created from images that are provided in Docker Hub by Microsoft:

Этот образ используется в этом примере для создания приложения. The sample uses this image for building the app. Образ содержит пакет SDK для .NET Core, который включает программы командной строки (CLI). The image contains the .NET Core SDK, which includes the Command Line Tools (CLI). Он оптимизирован для локальной разработки, отладки и модульного тестирования. The image is optimized for local development, debugging, and unit testing. Установленные средства разработки и компиляции делают этот образ относительно большим. The tools installed for development and compilation make this a relatively large image.

Этот образ используется в этом примере для выполнения приложения. The sample uses this image for running the app. Этот образ содержит среду выполнения и библиотеки ASP.NET Core и оптимизирован для запуска приложений в рабочей среде. The image contains the ASP.NET Core runtime and libraries and is optimized for running apps in production. Образ нацелен на высокую скорость развертывания и запуска приложений, поэтому он сравнительно невелик, что позволяет оптимизировать производительность сети между реестром Docker и узлом Docker. Designed for speed of deployment and app startup, the image is relatively small, so network performance from Docker Registry to Docker host is optimized. В контейнер копируются только двоичные файлы и содержимое, необходимые для запуска приложений. Only the binaries and content needed to run an app are copied to the container. Все содержимое готово к запуску, что гарантирует самый короткий срок от запуска Docker run до запуска приложения. The contents are ready to run, enabling the fastest time from Docker run to app startup. В модели Docker динамическая компиляция кода не требуется. Dynamic code compilation isn’t needed in the Docker model.

Предварительные требования Prerequisites

Клиент Docker 18.03 или более поздней версии Docker client 18.03 or later

Читайте также:  Fatal error failed to create xaudio2 engine

Скачивание примера приложения Download the sample app

Скачайте пример, клонировав репозиторий Docker для .NET Core: Download the sample by cloning the .NET Core Docker repository:

Локальный запуск приложения Run the app locally

Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp. Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.

Выполните следующую команду, чтобы собрать и запустить приложение локально: Run the following command to build and run the app locally:

В браузере перейдите по адресу http://localhost:5000 , чтобы протестировать приложение. Go to http://localhost:5000 in a browser to test the app.

Нажмите сочетание клавиш CTRL+C в командной строке, чтобы остановить приложение. Press Ctrl+C at the command prompt to stop the app.

Выполнение в контейнере Linux Run in a Linux container

Переключите клиент Docker на контейнеры Linux. In the Docker client, switch to Linux containers.

Перейдите в папку проекта Dockerfile dotnet-docker/samples/aspnetapp. Navigate to the Dockerfile folder at dotnet-docker/samples/aspnetapp.

Выполните следующие команды, чтобы собрать и запустить пример в Docker: Run the following commands to build and run the sample in Docker:

Команда build выполняет следующее: The build command arguments:

  • присваивает образу имя aspnetapp; Name the image aspnetapp.
  • ищет файл Dockerfile в текущей папке (точка в конце). Look for the Dockerfile in the current folder (the period at the end).

Команда run выполняет следующее: The run command arguments:

  • создает псевдотерминал и сохраняет это окно открытым, даже если он не подключен Allocate a pseudo-TTY and keep it open even if not attached. (действует так же, как —interactive —tty ); (Same effect as —interactive —tty .)
  • автоматически удаляет контейнер при завершении работы; Automatically remove the container when it exits.
  • сопоставляет порт 5000 на локальном компьютере с портом 80 в контейнере; Map port 5000 on the local machine to port 80 in the container.
  • присваивает контейнеру имя aspnetcore_sample; Name the container aspnetcore_sample.
  • указывает образ aspnetapp. Specify the aspnetapp image.

В браузере перейдите по адресу http://localhost:5000 , чтобы протестировать приложение. Go to http://localhost:5000 in a browser to test the app.

Запуск в контейнере Windows Run in a Windows container

  • Переключите клиент Docker на контейнеры Windows. In the Docker client, switch to Windows containers.

Перейдите к папке файла docker: dotnet-docker/samples/aspnetapp . Navigate to the docker file folder at dotnet-docker/samples/aspnetapp .

Выполните следующие команды, чтобы собрать и запустить пример в Docker: Run the following commands to build and run the sample in Docker:

Для контейнеров Windows вам нужен IP-адрес контейнера (адрес http://localhost:5000 не будет работать): For Windows containers, you need the IP address of the container (browsing to http://localhost:5000 won’t work):

Откройте другую командную строку. Open up another command prompt.

Запустите docker ps , чтобы получить список запущенных контейнеров. Run docker ps to see the running containers. Убедитесь, что в списке присутствует контейнер "aspnetcore_sample". Verify that the "aspnetcore_sample" container is there.

Выполните docker exec aspnetcore_sample ipconfig , чтобы отобразить IP-адрес контейнера. Run docker exec aspnetcore_sample ipconfig to display the IP address of the container. Эта команда возвращает примерно такой результат: The output from the command looks like this example:

Скопируйте IPv4-адрес контейнера (например 172.29.245.43) и вставьте его в адресную строку браузера, чтобы протестировать приложение. Copy the container IPv4 address (for example, 172.29.245.43) and paste into the browser address bar to test the app.

Локальная сборка и развертывание Build and deploy manually

В некоторых сценариях вам потребуется развернуть приложение в контейнер, скопировав нужные для выполнения файлы приложения. In some scenarios, you might want to deploy an app to a container by copying to it the application files that are needed at run time. В этом разделе показано, как развернуть приложение вручную. This section shows how to deploy manually.

Перейдите в папку проекта dotnet-docker/samples/aspnetapp/aspnetapp. Navigate to the project folder at dotnet-docker/samples/aspnetapp/aspnetapp.

Выполните команду dotnet publish. Run the dotnet publish command:

Эта команда выполняет следующее: The command arguments:

  • собирает приложение в режиме выпуска (по умолчанию используется режим отладки); Build the application in release mode (the default is debug mode).
  • создает файлы в папке published. Create the files in the published folder.

Запустите приложение. Run the application.

Перейдите по адресу http://localhost:5000 на домашнюю страницу приложения. Browse to http://localhost:5000 to see the home page.

Чтобы использовать приложение, опубликованное вручную в контейнере Docker, создайте новый Dockerfile и выполните команду docker build . , чтобы создать контейнер. To use the manually published application within a Docker container, create a new Dockerfile and use the docker build . command to build the container.

Файл Dockerfile The Dockerfile

Представленный здесь файл Dockerfile используется в команде docker build , которую вы выполняли ранее. Here’s the Dockerfile used by the docker build command you ran earlier. Она использует dotnet publish для создания и развертывания так же, как показано в этом разделе. It uses dotnet publish the same way you did in this section to build and deploy.

Читайте также:  Загрузочная флешка windows 10 с сайта microsoft

Файл Dockerfile The Dockerfile

Представленный здесь файл Dockerfile используется в команде docker build , которую вы выполняли ранее. Here’s the Dockerfile used by the docker build command you ran earlier. Она использует dotnet publish для создания и развертывания так же, как показано в этом разделе. It uses dotnet publish the same way you did in this section to build and deploy.

Дополнительные ресурсы Additional resources

  • Команда Docker build Docker build command
  • Команда Docker run Docker run command
  • Пример ASP.NET Core для Docker (который используется в этом руководстве). ASP.NET Core Docker sample (The one used in this tutorial.)
  • Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки Configure ASP.NET Core to work with proxy servers and load balancers
  • Работа со средствами Visual Studio для Docker Working with Visual Studio Docker Tools
  • Отладка с помощью Visual Studio Code Debugging with Visual Studio Code

Следующие шаги Next steps

Репозиторий Git помимо примера приложения содержит и документацию. The Git repository that contains the sample app also includes documentation. Обзор ресурсов, доступных в этом репозитории, см. в файле README. For an overview of the resources available in the repository, see the README file. Особый интерес представляют сведения о реализации протокола HTTPS: In particular, learn how to implement HTTPS:

mrOkey

Доброго времени суток, codeby.
Перед тем как продолжить основной цикл статей, я решил рассказать об инструментах, дающих неимоверное ускорение разработки. Начнём мы с Docker.

Докер появился сравнительно давно, и смог завоевать сердца сообщества разработчиков ( и не только ). Знающий читатель может опустить дальнейшие абзацы, и перейти непосредственно к части контейнеризации, для всех остальных я хочу рассказать что такое Docker и главное какую проблему он решает.

Проблема.
Давайте представим, что нам необходимо разработать приложение. Но мы не знаем, ни где это приложение будет запускаться, ни кто им будет пользоваться.
Другими словами — мы решаем проблему кроссплатформенности. Так как существует огромное, постоянно растущее, множество операционных систем и платформ, мы должны предвидеть все варианты. Альтернативное решение — можно скомпилировать приложение под наиболее популярные платформы. Хмм, да, но это очень объемная и вовсе не тривиальная задача.
Более адекватное решение — это разрабатывать под одну систему, систему которую мы можем виртуализировать. И да, до появления docker многие так и решали проблему, но такие приложения получались достаточно громоздкими и ресурсоемкими, разумеется мы этого не понимали пока не появился docker.

Так что же такое Docker
Docker это технология, которая позволяет нам создавать контейнеры ( песочницы ) для упрощения деплоя, развертки и запуска наших приложений на хостовых системах, например на Linux’ах.
Тут вы могли бы подумать, что Docker и виртуальные машины — это одно и тоже, но это не так. Давайте разбираться вместе, первым делом определим понятие виртуализация следующим образом: физически существует один компьютер, выполняющий функции нескольких. Данное поведение достигается за счёт специального программного обеспечения, называемого гипервизором. Гипервизор позволяет разделять ресурсы одного физического компьютера между многими “виртуальными”. Вот так по-детски просто мы описали это понятие.
Докер решают ту же задачу, но другим путём, более эффективным. Рассмотрим картинку ( с офф сайта docker )

Хорошо можно заметить, насколько эффективнее работает докер.

Docker для windows.
Поставить docker на Linux не составит проблем, винда же как всегда “преуспела” в этом плане. Чтобы запустить docker под окнами нужно скачать Docker Toolbox. Обычный docker под windows создает много проблем ( в частности забирает возможность пользоваться virtual box ). Скачиваем и ставим. Ничего сложного быть не должно.

Что такое ASP.NET Core
Это логичный виток эволюции, microsoftовского ASP.NET MVC — фреймворка для разработки web-приложений. Наконец-то мелкомягкие сделали кроссплатформенный фреймворк с открытым исходным кодом. Видать, не за горами, светлое будущее.
Думаю нет особого смысла расписывать что это, чем это лучше — поэтому просто отправлю вас читать документацию по этой замечательной вещи.

Необходимое отступление
Конечно рассматривая docker, нужно разрабатывать приложение. Наиболее классно — docker смотрится в микросервисной архитектуре, поэтому мы будем её использовать.
Что у нас будет:

  • Микросервис конвертации валют
  • Микросервис погоды
  • Фронтенд, который будет показывать два виджета — погоду и курс рубля к доллару.

Сервисы выбраны максимально теоретически — основная цель статьи показать красоту docker’а при разработке под asp.net core.

Начнём с микросервиса конвертации валюты. Возьмём уже известный ( по моим другим статьям) клиент для апи. Необходимые данные для конвертации будем брать отсюда:

Переходим к коду. Создаем проект ASP.NET Core.
Определим структуру проекта. Хорошей практикой при разработки апи является его версионирование. Поэтому создадим папку с названием V1, что соответствует нашей версии. Также создадим папку Contracts, где будем хранить модель данных. Затем создадим библиотеку классов (dll) для описания бизнес правил. В нашем случае тут будет размещен апи клиент для сайта

Читайте также:  Теккен для xbox 360

Далее всё просто, как всегда обращаемся к апи сайта, получаем результат. Должен предупредить, что бесплатный план накладывает множество ограничений, например нельзя менять source currencie, но не будем по этому поводу огорчаться.

На этом закончим с микросервисом для валюты, не забываем, что микросервисы намеренно выбраны элементарными — цель статьи показать как использовать docker.

Далее создадим микрослужбу для прогноза погоды. В этом нам поможет api, предоставляемое сайтом openweathermap.org. Нам так же необходимо получить API ключ, для этого нужно зарегистрироваться. И так же наш бесплатный аккаунт ограничивают. После регистрации на почту падает ключик.
Нас интересует вот этот endpoint:

В данном случае, мы урезаем результирующий объект. Нам достаточно текущей температуры и названия города.
Прежде чем занятся фронтэнд частью, я хочу немного поэкспериментировать со структурой проекта. Разложить отдельные микросервисы по папкам. Навести порядок так сказать. Теперь всё выглядит вот так.

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

Начнём с CurrencyConvert. Уберём апи ключ, и baseurl в файл настроек. Кстати, защита апи ключей в asp.net приложениях целая отдельная тема, которую я раскрою в другой статье. Кроме того, используем принцип DI и воспользуемся новым microsoft’овским DI-контейнером.
Первым делом вынесем url и api key. Для этого в файле appsettings.json создадим секцию Urls и добавим туда данные следующим образом:

На 11 строке определяется стратегия повторения запроса запроса к апи, в данном случае это реализовано с помощью библиотеки Polly, используется экспоненциальное повторение. Далее объявляются два приватных поля для url и api ключа соответственно. На строках 21-25 объявлен конструктор класса с параметром. Именно для этого конструктора мы позднее настроим DI. 23 и 24 строки демонстрируют извлечение данных из файла appsettings.json. Далее идёт реализация http метода get средствами стандартного HttpClient’a.

Теперь настроим DI контейнер. Для этого напишем метод расширения для интерфейса IServiceCollection ( который представляет microsoft DI framework ). В нём мы опишем конкретную реализацию интерфейса IApiClient. Выглядеть данный метод будет так.

На 13 строке объявляется апи клиент, именно сюда DI-контейнер будет “подсовывать” нужную реализацию данного интерфейса.
Далее всё осталось как было, за исключением преобразования возвращаемого объекта. Теперь там тоже обрезается не нужная информация. Если ты один из тех кто не знает, что такое принцип DI, DI-контейнер, не расстраивайся, а читаю мою другую статью и просвещайся.
Аналогично поступаем с сервисом WeatherInformation.

Для фронтэнда я хочу использовать typescript, react, redux для управления состоянием, axios для запросов к апи, less для разработки стилей. Помимо этого, я буду использовать апи gateway (в виде сервиса на asp net core) Как засетапить и настроить всю эту прелесть я рассказываю тут.

Контейнеризируй всё.
Перед тем как занятся фронтэнд частью я перейду к основной теме статьи — docker контейнеризации.
Первое, что необходимо — это поставить Docker Toolbox. По невнятным причинам Docker for windows не работает на 90% систем. К тому же он просит Hyper-v для своей работы. А Hyper-V убивает oracle virtual box, как известно. Поэтому DockerToolbox — бро, Docker for windows — не бро.
Затем нам необходимо скачать образы microsoft net core. Конкретно нужно скачать:

Итак продолжим, создадим Dockerfile в корневой папке солюшена — это то место где лежат файлы *.sln. Для WeatherInformation (да и для большинства asp net core приложений) — docker файл выглядит так

Хочу сразу сказать, что это оптимизированный образ, по сути, мы создаем тут 2 образа: один который base (я буду назвать его base-runtime) будем запускать, публиковать и так далее, а второй, который build ( он же publish ) удалим, так как он будет весить 1.75GB или около того.

и теперь отдадим объект с настройками клиентскому коду, например так:

Теперь везде где необходимо, мы просто подключаем наш провайдер:

Как видите получился довольно четкий алгоритм действий, как я и обещал. Если вы не знакомы с reactом, возможно мне стоит написать и о нём тоже. Поделитесь желанием в комментариях.
Немного поверстав, получаем два виджета выглядит финал версия как-то так ( слишком просто чтобы делать на react & redux ):

Docker compose
У нас получилось 3 сервиса:

  • Сервис погоды
  • Сервис курса валют
  • Фронтенд сервис

Разумеется запускать всё через docker run не кошерно. Нужно как менеджить всю нащу docker-сеть. Стандартное средство для этого — docker compose. Он основан на yml файле, в котором описываются все настройки микросервисов. По сути, это удобочитаемый файл конфигурации команды docker run. Итак начнём создавать docker-compose файл.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.