<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOpsTools &#8211; Best DevOps</title>
	<atom:link href="https://www.bestdevops.com/tag/devopstools/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bestdevops.com</link>
	<description>Lets Learn, Do it &#38; Share! Thats a Best DevOps!!!</description>
	<lastBuildDate>Tue, 29 Apr 2025 10:01:12 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Docker.NET: Seamless Container Management with .NET Power</title>
		<link>https://www.bestdevops.com/docker-net-seamless-container-management-with-net-power/</link>
					<comments>https://www.bestdevops.com/docker-net-seamless-container-management-with-net-power/#respond</comments>
		
		<dc:creator><![CDATA[vijay1 vijay1]]></dc:creator>
		<pubDate>Tue, 29 Apr 2025 10:01:07 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[containerization]]></category>
		<category><![CDATA[DevOpsTools]]></category>
		<category><![CDATA[DockerIntegration]]></category>
		<category><![CDATA[DockerNET]]></category>
		<category><![CDATA[DotNetContainers]]></category>
		<category><![CDATA[Microservices]]></category>
		<guid isPermaLink="false">https://www.bestdevops.com/?p=30986</guid>

					<description><![CDATA[What is Docker.NET? Docker.NET is a powerful, open-source .NET client library that provides a programmatic interface to communicate with the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1001" height="557" src="https://www.bestdevops.com/wp-content/uploads/2025/04/image-25.png" alt="" class="wp-image-30987" srcset="https://www.bestdevops.com/wp-content/uploads/2025/04/image-25.png 1001w, https://www.bestdevops.com/wp-content/uploads/2025/04/image-25-300x167.png 300w, https://www.bestdevops.com/wp-content/uploads/2025/04/image-25-768x427.png 768w" sizes="(max-width: 1001px) 100vw, 1001px" /></figure>



<h2 class="wp-block-heading">What is Docker.NET?</h2>



<p class="wp-block-paragraph"><strong>Docker.NET</strong> is a powerful, open-source .NET client library that provides a programmatic interface to communicate with the Docker Engine API using C# or any other .NET-compatible language. It allows developers to interact with Docker containers, images, volumes, and networks directly within their .NET applications, automating container lifecycle management and extending Docker’s capabilities into the .NET ecosystem.</p>



<p class="wp-block-paragraph">Originally developed to bridge the gap between Docker and the .NET platform, Docker.NET enables scenarios like creating, starting, stopping, inspecting, or deleting containers without relying on CLI commands or external scripts. It plays a critical role in modern DevOps and microservices workflows where container automation is key.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Major Use Cases of Docker.NET</h2>



<ol class="wp-block-list">
<li><strong>DevOps Automation:</strong><br>Automate Docker workflows such as building images, deploying containers, or managing volumes in a CI/CD pipeline using .NET.</li>



<li><strong>Container Orchestration Tools:</strong><br>Build custom container management tools or lightweight orchestrators in .NET to manage Docker on local or remote hosts.</li>



<li><strong>Microservices Deployment:</strong><br>Launch, monitor, and manage microservices inside Docker containers using .NET-based service controllers.</li>



<li><strong>Testing &amp; Simulation Environments:</strong><br>Automate the spinning up of mock environments (e.g., databases, services) using containers for unit and integration testing.</li>



<li><strong>Self-Healing Infrastructure:</strong><br>Monitor and auto-restart failed containers within a .NET background service or Windows service.</li>



<li><strong>Cloud-Native Applications:</strong><br>Integrate with cloud-native toolchains or Kubernetes environments where Docker is a fundamental component.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="393" src="https://www.bestdevops.com/wp-content/uploads/2025/04/image-26-1024x393.png" alt="" class="wp-image-30988" srcset="https://www.bestdevops.com/wp-content/uploads/2025/04/image-26-1024x393.png 1024w, https://www.bestdevops.com/wp-content/uploads/2025/04/image-26-300x115.png 300w, https://www.bestdevops.com/wp-content/uploads/2025/04/image-26-768x295.png 768w, https://www.bestdevops.com/wp-content/uploads/2025/04/image-26.png 1382w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">How Docker.NET Works – Architecture Overview</h2>



<p class="wp-block-paragraph">Docker.NET acts as a <strong>client library</strong> that communicates with the <strong>Docker Engine API</strong> via <strong>HTTP</strong> over a <strong>Unix socket</strong> or <strong>named pipe</strong> (Windows). It sends JSON-based API requests that Docker understands and translates into operations like container creation or image pulling.</p>



<h3 class="wp-block-heading">Architecture Components:</h3>



<ul class="wp-block-list">
<li><strong>Your .NET Application</strong> – Uses Docker.NET library via NuGet.</li>



<li><strong>Docker.NET Client</strong> – Converts high-level method calls (e.g., <code>CreateContainerAsync</code>) into HTTP requests.</li>



<li><strong>Docker Engine API</strong> – Receives requests and interacts with the Docker daemon.</li>



<li><strong>Docker Daemon</strong> – Performs the actual work like creating containers, managing volumes, or fetching logs.</li>
</ul>


<pre class="wp-block-code"><span><code class="hljs">&#91;.NET App] → &#91;DockerClient (Docker.NET)] → &#91;Docker Engine API] → &#91;Docker Daemon] → Containers/Images
</code></span></pre>


<p class="wp-block-paragraph">This model ensures you don’t need to shell out to the CLI or use OS-dependent tools—just pure C# code.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Basic Workflow of Docker.NET</h2>



<p class="wp-block-paragraph">Here’s a generalized workflow when using Docker.NET:</p>



<ol class="wp-block-list">
<li><strong>Connect to Docker Engine:</strong><br>Instantiate a <code>DockerClientConfiguration</code> to connect to the Docker engine.</li>



<li><strong>Create a Container:</strong><br>Define container parameters (image, ports, volumes, etc.) and use <code>Containers.CreateContainerAsync</code>.</li>



<li><strong>Start the Container:</strong><br>Use <code>Containers.StartContainerAsync</code> to launch the container.</li>



<li><strong>Monitor Logs / Stats:</strong><br>Stream container logs or stats using <code>Containers.GetContainerLogsAsync</code> or <code>Containers.GetContainerStatsAsync</code>.</li>



<li><strong>Stop &amp; Remove Container:</strong><br>Clean up using <code>Containers.StopContainerAsync</code> and <code>Containers.RemoveContainerAsync</code>.</li>



<li><strong>Manage Images, Volumes, Networks:</strong><br>Pull or build images, create volumes, and manage networks using respective APIs.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step-by-Step Getting Started Guide for Docker.NET</h2>



<h3 class="wp-block-heading">✅ <strong>Prerequisites</strong></h3>



<ul class="wp-block-list">
<li>Docker installed and running (Windows, Linux, or macOS)</li>



<li>.NET 6.0 SDK or later</li>



<li>Visual Studio or VS Code</li>



<li>Internet access (to pull images from Docker Hub)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 1: Create a .NET Console App</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">dotnet <span class="hljs-keyword">new</span> <span class="hljs-built_in">console</span> -n DockerNetSample
cd DockerNetSample
</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 2: Add Docker.DotNet NuGet Package</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">dotnet</span> <span class="hljs-selector-tag">add</span> <span class="hljs-selector-tag">package</span> <span class="hljs-selector-tag">Docker</span><span class="hljs-selector-class">.DotNet</span>
</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 3: Initialize Docker Client</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript">using Docker.DotNet;
using Docker.DotNet.Models;

<span class="hljs-keyword">var</span> config = <span class="hljs-keyword">new</span> DockerClientConfiguration(
    <span class="hljs-keyword">new</span> Uri(<span class="hljs-string">"npipe://./pipe/docker_engine"</span>)); <span class="hljs-comment">// For Windows</span>
    <span class="hljs-comment">// For Linux/macOS use: new Uri("unix:///var/run/docker.sock")</span>

<span class="hljs-keyword">var</span> client = config.CreateClient();
</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 4: Pull an Image (e.g., nginx)</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">await</span> client.Images.CreateImageAsync(
    <span class="hljs-keyword">new</span> ImagesCreateParameters { FromImage = <span class="hljs-string">"nginx"</span>, Tag = <span class="hljs-string">"latest"</span> },
    <span class="hljs-literal">null</span>,
    <span class="hljs-keyword">new</span> Progress&lt;JSONMessage&gt;(<span class="hljs-function"><span class="hljs-params">msg</span> =&gt;</span> Console.WriteLine(msg.Status)));
</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 5: Create and Start a Container</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> response = <span class="hljs-keyword">await</span> client.Containers.CreateContainerAsync(<span class="hljs-keyword">new</span> CreateContainerParameters
{
    Image = <span class="hljs-string">"nginx"</span>,
    Name = <span class="hljs-string">"my-nginx"</span>,
    HostConfig = <span class="hljs-keyword">new</span> HostConfig
    {
        PortBindings = <span class="hljs-keyword">new</span> Dictionary&lt;string, IList&lt;PortBinding&gt;&gt;
        {
            { <span class="hljs-string">"80/tcp"</span>, <span class="hljs-keyword">new</span> List&lt;PortBinding&gt; { <span class="hljs-keyword">new</span> PortBinding { HostPort = <span class="hljs-string">"8080"</span> } } }
        }
    }
});

<span class="hljs-keyword">await</span> client.Containers.StartContainerAsync(response.ID, <span class="hljs-literal">null</span>);
Console.WriteLine($<span class="hljs-string">"Container started with ID: {response.ID}"</span>);
</code></span></pre>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Step 6: Stop and Remove the Container</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">await</span> client.Containers.StopContainerAsync(<span class="hljs-string">"my-nginx"</span>, <span class="hljs-keyword">new</span> ContainerStopParameters());
<span class="hljs-keyword">await</span> client.Containers.RemoveContainerAsync(<span class="hljs-string">"my-nginx"</span>, <span class="hljs-keyword">new</span> ContainerRemoveParameters());</code></span></pre>]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/docker-net-seamless-container-management-with-net-power/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
