Как запустить образ 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. Приложение делает следующее:
- Иллюстрирует конфигурацию клиента 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());
}
Код делает следующее:
- Создает новый экземпляр класса 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, Купи мнекофе
Также опубликовано здесь
Оригинал