{"id":326954,"date":"2021-08-17T20:00:00","date_gmt":"2021-08-17T17:00:00","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-run-a-net-app-in-docker-cloudsavvy-it\/"},"modified":"2021-08-17T20:00:00","modified_gmt":"2021-08-17T17:00:00","slug":"how-to-run-a-net-app-in-docker-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-net-app-in-docker-cloudsavvy-it\/","title":{"rendered":"#How to Run a .NET App in Docker \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a3b597f08cc1\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a3b597f08cc1\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-run-a-net-app-in-docker-cloudsavvy-it\/#Dockerizing_NET\" >Dockerizing .NET<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Run a .NET <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">App<\/a> in Docker \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage imgchk9 alignnone wp-image-6018 size-full\" srcset=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/b476fc9b.png?width=398&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 400w, https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/b476fc9b.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 1200w\" sizes=\"auto, 400w, 1200w\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/b476fc9b.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"C# logo\" width=\"700\" height=\"300\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Docker is a containerization service, used for running applications in isolated environments packaged with all the dependencies and code it needs to function. It can run all kinds of applications, including .NET-based programs using Microsoft-provided runtime images.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Dockerizing_NET\"><\/span>Dockerizing .NET<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Microsoft <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/hub.docker.com\/_\/microsoft-dotnet-core\/\">provides prebuilt base images for running .NET applications<\/a>. You won\u2019t need to handle installing the .NET runtime or SDK in your Docker container, as you can simply extend from Microsoft\u2019s base image for the version of .NET that your application uses.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-6734 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/09\/4c86fda3.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Microsoft .NET Core\" width=\"700\" height=\"301\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Unless you plan on deploying <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.docker.com\/products\/windows-containers\">Windows containers<\/a> on a Windows server, you will need to be using either .NET Core or .NET 5. The older .NET Framework runtime is not cross-platform and will not run on Linux-based containers.<\/p>\n<p>If you don\u2019t have Docker installed on your development machine, you\u2019ll <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.docker.com\/products\/docker-desktop\">need to install Docker Desktop<\/a> to have access to the CLI. If you\u2019re using WSL on Windows, you\u2019ll want to enable the WSL 2-based engine, which provides better performance.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-6731 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/09\/50830413.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"If using WSL on Windows, enable the WSL 2-based engine\" width=\"700\" height=\"343\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>To test things out, we\u2019ll create a new ASP.NET API application. The same <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a> procedure will apply for any kind of application, as all Docker is doing is running a build whenever you build the container, and starting your application with an entrypoint command.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-6733 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/09\/ed0ea18f.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Create a new ASP.NET API application\" width=\"700\" height=\"282\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Create a new file called <code>Dockerfile<\/code> at the root of your project, where your solution is located. Paste in the following configuration:<\/p>\n<pre>FROM mcr.microsoft.com\/dotnet\/core\/sdk AS build-env&#13;\nWORKDIR \/app&#13;\n&#13;\n# Copy csproj and restore&#13;\nCOPY *.csproj .\/&#13;\nRUN dotnet restore&#13;\n&#13;\n# Copy everything else and build&#13;\nCOPY . .\/&#13;\nRUN dotnet publish -o out&#13;\n&#13;\n# Build runtime image&#13;\nFROM mcr.microsoft.com\/dotnet\/core\/runtime&#13;\nWORKDIR \/app&#13;\nCOPY --from=build-env \/app\/out .&#13;\nENTRYPOINT [\"dotnet\", \"DockerTest.dll\"]<\/pre>\n<p>This Dockerfile pulls the .NET Core SDK image to perform the build. It copies the <code>.csproj<\/code>\u00a0over and restores, then copies everything else and runs a build. Then, it builds a new image from the .NET Runtime image and copies the build artifacts over.<\/p>\n<p>Finally, the entrypoint is defined here as <code>dotnet DockerTest.dll<\/code>. This will start the ASP.NET web server, though you may need to change the parameters for your application, or specify an entirely different entrypoint command.<\/p>\n<p>You can test run your container with <code>docker container run<\/code>, passing it in the ID of the build container:<\/p>\n<pre>docker container run containerid<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"imgchk9 alignnone wp-image-6736 size-full\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/09\/791ec27a.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Run your container with docker container run, passing it in the ID of the build container\" width=\"700\" height=\"227\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>For an ASP.NET application, you\u2019ll need to open ports by mapping a port on the host to a port on the container:<\/p>\n<pre>docker run -p 80:80 containerid<\/pre>\n<p>You can read our guide to working with Docker and Dockerfiles to learn more.\n<\/p><\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/6690\/how-to-run-a-net-app-in-docker\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Run a .NET App in Docker \u2013 CloudSavvy IT&#8221; Docker is a containerization service, used for running applications in isolated environments packaged with all the dependencies and code it needs to function. It can run all kinds of applications, including .NET-based programs using Microsoft-provided runtime images. Dockerizing .NET Microsoft provides prebuilt base images&#8230;<\/p>\n","protected":false},"author":1,"featured_media":326955,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/08\/b476fc9b.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-326954","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/326954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=326954"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/326954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/326955"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=326954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=326954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=326954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}