Введение

В этой статье мы собираемся обсудить пошаговую реализацию и контейнеризацию веб-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, а также контейнеризацию с помощью докера.