Как запустить образ Microsoft .NET Docker на C#

Как запустить образ Microsoft .NET Docker на C#

22 февраля 2023 г.

Docker стал важным инструментом современной разработки программного обеспечения, предоставляя эффективный и портативный способ упаковки и распространения приложений.

Разработчики Microsoft .NET могут воспользоваться преимуществами Docker, чтобы упростить рабочий процесс разработки и повысить согласованность и надежность своих приложений. В этой статье рассказывается, как запустить образ Microsoft .NET Docker из кода на C#.

Предпосылки

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

* Докер для рабочего стола

* Пакет SDK для Visual Studio или .NET Core

Вам также потребуется базовое понимание концепций Docker, таких как образы и контейнеры.

Начало работы

Мы создадим новое консольное приложение C# в Visual Studio. Откройте Visual Studio и выберите Файл > Новый > Проект. Выберите консольное приложение (.NET Core) в качестве типа проекта и дайте ему имя, например DockerCSharp.

Затем откройте файл Program.cs и замените существующий код следующим:

using Docker.DotNet;
using Docker.DotNet.Models;
using System;
using System.IO;
using System.Threading.Tasks;

namespace DockerCSharp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Define Docker API client configuration
            var dockerConfig = new DockerClientConfiguration(new Uri("npipe://./pipe/docker_engine"));

            // Create Docker API client
            var dockerClient = dockerConfig.CreateClient();

            // Define container configuration
            var containerConfig = new Config()
            {
                Image = "mcr.microsoft.com/dotnet/sdk:5.0",
                Cmd = new[] { "dotnet", "new", "console", "-o", "/app", "--no-https" },
                HostConfig = new HostConfig()
                {
                    AutoRemove = true,
                    Binds = new[] { $"{Directory.GetCurrentDirectory()}/app:/app" }
                }
            };

            // Create container
            var containerCreateResponse = await dockerClient.Containers.CreateContainerAsync(containerConfig);
            var containerId = containerCreateResponse.ID;

            // Start container
            await dockerClient.Containers.StartContainerAsync(containerId, new ContainerStartParameters());

            // Wait for container to finish executing
            var containerWaitResponse = await dockerClient.Containers.WaitContainerAsync(containerId);

            // Inspect container logs
            var containerLogsStream = await dockerClient.Containers.GetContainerLogsAsync(containerId, new ContainerLogsParameters()
            {
                ShowStdout = true,
                ShowStderr = true,
                Follow = false
            });
            using (var containerLogsReader = new StreamReader(containerLogsStream))
            {
                Console.WriteLine(containerLogsReader.ReadToEnd());
            }

            // Remove container
            await dockerClient.Containers.RemoveContainerAsync(containerId, new ContainerRemoveParameters());
        }
    }
}

Этот код определяет консольное приложение C#, которое использует пакет NuGet Docker.DotNet для взаимодействия с Docker API. Приложение делает следующее:

  1. Иллюстрирует конфигурацию клиента Docker API и создает экземпляр клиента Docker API.

2. Определяет конфигурацию контейнера, в которой указывается используемый образ Microsoft .NET Docker, команда для запуска внутри контейнера (новая консоль dotnet), выходной каталог и привязка к локальному каталогу приложения.

3. Создает контейнер, используя конфигурацию контейнера.

4. Запускает контейнер.

5. Ожидает завершения выполнения контейнера.

6. Проверяет журналы контейнера и записывает их в консоль.

7. Удаляет контейнер.

Обратите внимание, что код предполагает, что Docker API доступен в конечной точке именованного канала по умолчанию в Windows, npipe://./pipe/docker_engine.

Теперь давайте запустим контейнер и посмотрим, все ли работает так, как ожидалось. Мы будем использовать Docker SDK для .NET для взаимодействия с механизмом Docker и создания контейнера на основе только что полученного образа microsoft/dotnet.

Вот пример того, как это сделать:

using Docker.DotNet;
using Docker.DotNet.Models;

public async Task RunContainer()
{
    var endpoint = "npipe://./pipe/docker_engine"; // This is the default endpoint for Docker on Windows

    var dockerClient = new DockerClientConfiguration(new Uri(endpoint)).CreateClient();

    var containerConfig = new Config()
    {
        Image = "microsoft/dotnet",
        Cmd = new List<string>() { "run", "ConsoleApp.dll" } // Replace with the name of your application's entry point
    };

    var containerHostConfig = new HostConfig()
    {
        PortBindings = new Dictionary<string, IList<PortBinding>>()
        {
            { "5000/tcp", new List<PortBinding>(){ new PortBinding { HostPort = "5000" } } }
        }
    };

    var container = await dockerClient.Containers.CreateContainerAsync(new CreateContainerParameters(containerConfig)
    {
        HostConfig = containerHostConfig,
        Name = "my-dotnet-app"
    });

    await dockerClient.Containers.StartContainerAsync(container.ID, new ContainerStartParameters());
}

Код делает следующее:

  1. Создает новый экземпляр класса DockerClient, представляющий подключение к механизму Docker.

2. Определяет конфигурацию контейнера, указав образ microsoft/dotnet и команду для запуска нашего приложения. В данном случае мы бежим. ConsoleApp.dll.

3. Указывает конфигурацию хоста, включая привязки портов. Мы привязываем порт 5000 в контейнере к порту 5000 на хост-компьютере.

4. Создает контейнер, используя только что определенную конфигурацию.

5. Запускает контейнер.

Вы можете использовать свой веб-браузер, чтобы увидеть, все ли работает. Если все работает правильно, вы должны увидеть вывод вашего приложения в браузере.

Заключение

В этой статье показано, как запустить образ Microsoft .NET Docker из кода с помощью Docker SDK для .NET. С помощью этого метода вы можете легко упаковывать и развертывать приложения .NET в виде контейнеров Docker, упрощая управление и развертывание зависимостей в различных средах.

Следите за мной

Публикация C#, LinkedIn, Instagram, Twitter, Dev.to, Купи мнекофе


Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE