Введение
В этой статье мы собираемся обсудить пошаговую реализацию и контейнеризацию веб-API .NET Core 7 с помощью Docker.
Повестка дня
· Что такое Докер?
· Зачем использовать Docker?
· Преимущества Докера
· Пошаговая реализация веб-API .NET Core.
· Контейнеризация приложений
Предварительные условия
· Визуальная Студия 2022
· Рабочий стол Docker
· Пакет SDK для .NET Core 7
Что такое Докер?
· Docker — это платформа контейнеризации с открытым исходным кодом, которая позволяет разработчикам быстро создавать, запускать и развертывать приложения. Приложение пакета Docker, включая все его библиотеки, конфигурации и зависимости.
· Его основная задача — автоматизировать развертывание приложений внутри контейнеров, которые загружаются за считанные секунды.
Зачем использовать Докер?
· В мире технологий, я думаю, вы слышали фразу «Это работает на моей машине», и в основном это происходит из-за различных библиотек, конфигураций и зависимостей, необходимых для работы приложения под операционной системой.
· Управление зависимостями и конфигурацией приложений — важнейшая задача для команды DevOps, и Docker обладает всеми возможностями для решения подобных проблем в жизненном цикле разработки программного обеспечения.
· Docker помогает нам создавать и развертывать распределенные микросервисные приложения с помощью непрерывной интеграции и конвейера непрерывного развертывания, что экономит много времени.
· Docker использует контейнер как программную единицу, которая упаковывает код приложения со всеми его зависимостями, чтобы приложение могло быстро работать в изолированных средах.
Преимущества Докера
Переносимость приложений. Docker — это контейнерная платформа, позволяющая запускать контейнеры на физической машине, виртуальной машине или любом другом облачном провайдере за меньшее время без изменений.
Быстрая доставка и развертывание. Docker позволяет нам эффективно создавать и развертывать образы приложений на каждом этапе фазы развертывания.
Масштабируемость. Docker является масштабируемым, поскольку позволяет легко увеличивать и уменьшать количество экземпляров приложения в различных средах.
Изоляция. Docker помещает приложение в контейнер и запускает его в изолированной среде со всеми зависимостями и конфигурациями.
Безопасность. Docker гарантирует, что приложения, работающие внутри разных контейнеров, изолированы друг от друга, а также имеет различные уровни безопасности и инструменты для управления этим.
Высокая производительность. Docker обычно работает быстрее и требует меньше ресурсов, чем виртуальные машины.
Управление контролем версий. Docker предоставляет функции, связанные с управлением версиями, которые могут отслеживать версии контейнера и при необходимости откатывать их.
Пошаговая реализация веб-API .NET Core.
Давайте создадим одно приложение веб-API.
Шаг 1
Создайте новое приложение веб-API .NET Core.
Шаг 2
Настройте свой новый проект.
Шаг 3
Предоставьте дополнительную информацию.
Шаг 4
Установите следующие пакеты.
Шаг 5
Добавьте WeatherForecast.cs в новый проект.
namespace NET_Core_Web_API_Docker_Demo { public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string? Summary { get; set; } } }
Шаг 6
Затем создайте новый WeatherForecastController.
using Microsoft.AspNetCore.Mvc; namespace NET_Core_Web_API_Docker_Demo.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } }
Шаг 7
Обновите файл Program.cs.
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseSwagger(); app.UseSwaggerUI(); app.UseAuthorization(); app.MapControllers(); app.Run();
Шаг 8
Запустите только что созданное приложение.
Контейнеризация приложений
Примечание.Пожалуйста,убедитесь, что Docker работает в вашей системе.
Шаг 1
Создайте образ докера для нашего вновь созданного приложения.
# Use the official .NET Core SDK as a parent image FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /app # Copy the project file and restore any dependencies (use .csproj for the project name) COPY *.csproj ./ RUN dotnet restore # Copy the rest of the application code COPY . . # Publish the application RUN dotnet publish -c Release -o out # Build the runtime image FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime WORKDIR /app COPY --from=build /app/out ./ # Expose the port your application will run on EXPOSE 80 # Start the application ENTRYPOINT ["dotnet", "NET-Core-Web-API-Docker-Demo.dll"]
Объяснение:
# Use the official .NET Core SDK as a parent image FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /app
Начните с базового образа вашего контейнера Docker, который указан как mcr.microsoft.com/dotnet/sdk:7.0. В этом образе в качестве отправной точки используется официальный пакет SDK .NET Core 7.0. Для дальнейшего обращения к этому этапу ему присвоен псевдоним «сборка».
· Затем установите в контейнере рабочий каталог /app. Сюда будут скопированы и собраны файлы вашего приложения.
# Copy the project file and restore any dependencies (use .csproj for the project name) COPY *.csproj ./ RUN dotnet restore
· Чтобы скопировать файлы проекта (*.csproj) с вашего компьютера в каталог /app в контейнере, вам необходимо использовать команду «COPY *.csproj./». Этот шаг отделен от шага по оптимизации кэширования слоев Docker. Это гарантирует, что при внесении изменений в файл проекта будут выполнены последующие шаги.
· Чтобы восстановить зависимости проекта и убедиться, что все необходимые пакеты загружены и доступны, для сборки приложения вы можете использовать команду «RUN dotnet Restoration». Эта команда позаботится о восстановлении всех зависимостей.
# Copy the rest of the application code COPY . .
· Далее скопируйте оставшийся исходный код и файлы из локального каталога в каталог приложения и создайте приложение.
# Publish the application RUN dotnet publish -c Release -o out
· «RUN dotnetPublish -c Release -o out» Эта команда восстанавливает зависимости проекта и все необходимые пакеты.
· Эта команда создает приложение веб-API .NET Core в режиме выпуска и публикует выходные данные в каталоге out. Флаг -o out указывает выходной каталог.
# Build the runtime image FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime WORKDIR /app COPY --from=build /app/out ./
· С mcr.microsoft.com/dotnet/runtime:7.0: в этом разделе начинается новый этап с использованием образа среды выполнения. Этот образ небольшой и содержит только среду выполнения, необходимую для запуска приложений .NET Core, в отличие от образа SDK, который используется для сборок.
· WORKDIR /app: в этом новом разделе установите рабочий каталог /app.
· COPY — from=build /app/out .: копирует скомпилированное приложение из компонента сборки в текущий компонент среды выполнения. Это гарантирует, что в окончательный образ среды выполнения будут добавлены только необходимые функции.
# Expose the port your application will run on EXPOSE 80
· EXPOSE 80: эта строка указывает, что контейнер будет предоставлять порт 80.
# Start the application ENTRYPOINT ["dotnet", "NET-Core-Web-API-Docker-Demo.dll"]
· ENTRYPOINT [“dotnet”, “NET-Core-Web-API-Docker-Demo.dll”]: указывает команду, которая будет выполняться при запуске объекта на основе этого образа. В этом случае оно создает приложение веб-API .NET Core, вызывая dotnet NET-Core-Web-API-Docker-Demo.dll.
Шаг 2
Создайте образ докера.
docker build -t web-api-demo.
Команда docker build используется для создания образа Docker из файла Docker. Он включает в себя множество опций, включая опцию -t для указания тега для изображения.
Эта команда создает образ Docker, который использует файл Dockerfile в текущем каталоге (.) и помечает его как web-api-demo.
Шаг 3
Запустите образ Docker внутри контейнера Docker.
docker run -d -p 5001:80 — имя веб-апи-контейнера веб-апи-демо
-d: отдельный режим (работает в фоновом режиме).
-p 5001:80: сопоставить порт 5001 на локальном компьютере с портом 80 внутри контейнера.
— имя web-api-container: назначить name в контейнер.
web-api-demo: используйте образ, созданный вами ранее.
Шаг 4
Откройте браузер и нажмите URL-адрес API, чтобы выполнить различные конечные точки.
Гитхаб:
https://github.com/Jaydeep-007/NET-Core-Web-API-Docker-Demo
Заключение
В этой статье мы обсудили основы докера и пошаговую реализацию приложения веб-API .NET Core 7, а также контейнеризацию с помощью докера.