{"id":5955,"date":"2016-11-18T09:49:30","date_gmt":"2016-11-18T17:49:30","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/cesardelatorre\/?p=5955"},"modified":"2016-11-18T09:49:30","modified_gmt":"2016-11-18T17:49:30","slug":"summary-of-official-microsoft-docker-images-for-net-core-and-net-framework","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/summary-of-official-microsoft-docker-images-for-net-core-and-net-framework\/","title":{"rendered":"Summary of Microsoft Docker Images for .NET Core and .NET Framework"},"content":{"rendered":"<p><a href=\"http:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-content\/uploads\/sites\/32\/2016\/11\/Docker-Hub-NET.png\"><img decoding=\"async\" title=\"Docker-Hub-NET\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"Docker-Hub-NET\" src=\"http:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-content\/uploads\/sites\/32\/2016\/11\/Docker-Hub-NET_thumb.png\" width=\"244\" height=\"139\"><\/a><\/p>\n<p>Even when these official images are still evolving, I think that a summary about the multiple Microsoft Docker images for .NET available at <a href=\"https:\/\/hub.docker.com\/u\/microsoft\/\">Docker Hub<\/a> would be a \u201cnice to have\u201d thing.<\/p>\n<p>This blog post is related to my previous blog post on \u201c<a href=\"https:\/\/blogs.msdn.microsoft.com\/cesardelatorre\/2016\/11\/16\/docker-containers-should-i-use-net-core-or-net-framework-2\/\">Docker containers \u2013 Should I use .NET Core or .NET Framework?<\/a>\u201d, however I\u2019m drilling down here into the specific images available today (November 18th 2016).<\/p>\n<h2><b>.NET Core images &#8211; <\/b><a href=\"https:\/\/hub.docker.com\/u\/microsoft\/\">microsoft<\/a>\/<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/\">dotnet<\/a><\/h2>\n<p>(<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/\">https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/<\/a>)<\/p>\n<p>This repository is named as <a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/\">microsoft\/dotnet<\/a> and contains multiple images supporting several Operating Systems and versions (Linux and Windows) based on multiple available TAGs, like:<\/p>\n<table cellspacing=\"0\" cellpadding=\"2\" width=\"401\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet<strong>:1.1-runtime<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Core 1.1 runtime-only on Linux Debian<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet<strong>:1.1-runtime-nanoserver<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Core 1.1 runtime-only on Windows Nanoserver<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The whole repo name plus the selected tag is what you need to provide into your dockerfile file.<\/p>\n<p>There are additional Images used to develop, build or run .NET Core apps with sub-variant tags like \u201c<strong>:1.1.0-sdk-msbuild<\/strong>\u201d, etc. These .NET Core SDK Docker images are useful images for iterative development and the easiest way to get started using .NET Core with Docker. However, It isn&#8217;t recommended for production since it&#8217;s a bigger image than necessary as they include SDKs.<\/p>\n<p><b>When to use images from the .NET Core repository<\/b><\/p>\n<ul>\n<li>Light\/simple processes and &#8220;console&#8221; apps based on .NET Core (Linux or Windows) for batch and Azure WebJobs and other application types based on the \u201cconsole\u201d program.  \n<li>(<strong>Temporally<\/strong>) <strong>For \u201cASP.NET Core on Windows Nano Server\u201d, <\/strong>using <strong>microsoft\/dotnet:1.1-runtime-nanoserver image <\/strong>until Windows Image on NanoServer is provided in the ASPNETCORE repo (Still not available in ASPNETCORE repo as of Feb. 2017).<\/li>\n<ul>\n<li>Using the .NET Core image instead of the ASPNETCore image is pretty similar. The ASPNET image (currently only available for Linux) provides additional optimizations like the automatic setting of aspnetcore_urls to port 80 and the pre-ngend cache of assemblies. The pre-ngend cache of assemblies is important for faster startup of containers, but in development mode, it is not needed. So for development targeting ASP.NET Core services and Windows Containers, you can use these Docker images. \n<li> See this <a href=\"http:\/\/www.hanselman.com\/blog\/ExploringASPNETCoreWithDockerInBothLinuxAndWindowsContainers.aspx\">Scott\u2019s post related<\/a> to see how to run ASP.NET Core containers on Windows Nano Server. <\/li>\n<\/ul>\n<\/ul>\n<h2><b>ASP.NET Core images &#8211; <\/b><a href=\"https:\/\/hub.docker.com\/u\/microsoft\/\">microsoft<\/a>\/<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/\">aspnetcore<\/a><\/h2>\n<p>(<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/aspnetcore\/\">https:\/\/hub.docker.com\/r\/microsoft\/aspnetcore\/<\/a>)<\/p>\n<p>This repository is named as <a href=\"https:\/\/hub.docker.com\/r\/microsoft\/aspnetcore\/\">microsoft\/aspnetcore<\/a> and contains multiple images supporting several versions (currently several versions for Linux Debian, but Windows Nano Server will be added pretty soon) based on multiple available TAGs, like:<\/p>\n<table cellspacing=\"0\" cellpadding=\"2\" width=\"401\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnetcore<strong>:1.1.0<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Core 1.1 runtime-only on Linux Debian<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnetcore<strong>:1.0.1<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Core 1.0.1 runtime-only on Linux Debian<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnetcore<strong>:latest<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Core (latest version) runtime-only on Linux Debian<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The whole repo name plus the selected tag is what you need to provide into your dockerfile file.<\/p>\n<p><b>When to use images from the ASP.NET Core repository<\/b><\/p>\n<p>When using ASP.NET Core as the selected framework for your application\/service, like when building a Web API service, Microsoft encourages you to use the ASP.NET Core Docker image instead of the regular .NET Core image, as the ASP.NET Core image is optimized for ASP.NET Core tasks. In addition to .NET Core this image contains a set of native images for all of the ASP.NET Core libraries. These images will be used at runtime to increase the cold-start performance of your application. A significant amount of the time taken to JIT compile on startup of your application is typically spent compiling ASP.NET Core libraries rather than your application code. Given that these libraries are not going to change for a given version we include native images so that the runtime can load them instead of running the JIT.<\/p>\n<p>ASP.NET Core on Windows Nano Server will be added to this repo pretty soon (You also have it in the .NET Core image, in the meantime).<\/p>\n<p>ASP.NET Core on traditional NET Framework and Windows Server Core is not an environment we actually encourage for Docker. With .NET Standard 2.0 we are bringing back the majority of APIs that force people to use ASP.NET Core on full .NET today. Therefore we are not creating an image for this, not encouraging you to use ASP.NET Core running on full .NET Framework and Windows Server Core because it gives you a worse experience in Docker with a much larger surface area, much bigger images, etc. If using ASP.NET Core, we recommend to run it on top of the CoreCLR and Windows Nano Server.<\/p>\n<p>Having said that, you could always build your custom image from scratch (based on the <a href=\"https:\/\/hub.docker.com\/r\/microsoft\/windowsservercore\/\">Windows Server Core image<\/a>) for ASP.NET Core running on traditional .NET Framework and Windows Server Core if that is an scenario you really need.<\/p>\n<h2><b>.NET Framework images &#8211; <\/b>microsoft\/dotnet-framework<\/h2>\n<p>(<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet-framework\/\">https:\/\/hub.docker.com\/r\/microsoft\/dotnet-framework\/<\/a>)<\/p>\n<p>This is the repo for the official Docker images for <b>.NET Framework<\/b> on <b>Windows Server 2016 Server Core<\/b>\u201d<\/p>\n<p>The supported tags are currently the following:<\/p>\n<table cellspacing=\"0\" cellpadding=\"2\" width=\"401\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet-framework<strong>:3.5<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Framework 3.5 on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet-framework<strong>:4.6.2<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Framework 4.6.2 on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet-framework<strong>:4.6.2-windowsservercore<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Framework 4.6.2 on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet-framework<strong>:4.6.2-windowsservercore-10.0.14393.447<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Framework 4.6.2 on Windows Server Core with specific version<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/dotnet-framework<strong>:latest<\/strong><\/td>\n<td valign=\"top\" width=\"199\">.NET Framework (latest) on Windows Server Core (latest)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The whole repo name plus the selected tag is what you need to provide into your dockerfile file.<\/p>\n<p><b>When to use images from the .NET Framework repository<\/b><\/p>\n<p>When using any traditional .NET Framework technology, like plain <strong>console<\/strong> apps, <strong>WCF<\/strong>, <strong>WF,<\/strong> etc.<\/p>\n<p>&nbsp;<\/p>\n<h2><b>ASP.NET images &#8211; <\/b>microsoft\/aspnet<\/h2>\n<p><a href=\"https:\/\/hub.docker.com\/r\/microsoft\/aspnet\/\">https:\/\/hub.docker.com\/r\/microsoft\/aspnet\/<\/a><\/p>\n<p>This is the repo for ASP.NET images (Based on the traditional .NET Framework). The main difference between this image and the .NET Framework image is that this image also has IIS installed, which is a pre-requisite and dependency for the traditional ASP.NET applications.<\/p>\n<p>The supported tags are currently the following.<\/p>\n<p>&nbsp;<\/p>\n<table cellspacing=\"0\" cellpadding=\"2\" width=\"401\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspne<strong>t:3.5<\/strong><\/td>\n<td valign=\"top\" width=\"199\">ASP.NET on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnet<strong>:4.6.2<\/strong><\/td>\n<td valign=\"top\" width=\"199\">ASP.NET on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnet<strong>:4.6.2-windowsservercore<\/strong><\/td>\n<td valign=\"top\" width=\"199\">ASP.NET on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnet<strong>:4.6.2-windowsservercore-10.0.14393.447<\/strong><\/td>\n<td valign=\"top\" width=\"199\">ASP.NET on Windows Server Core with specific version<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"200\">microsoft\/aspnet<strong>:latest<\/strong><\/td>\n<td valign=\"top\" width=\"199\">ASP.NET Framework (latest) on Windows Server Core (latest)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The whole repo name plus the selected tag is what you need to provide into your dockerfile file.<\/p>\n<p><b>When to use images from the ASP.NET repository<\/b><\/p>\n<p>When using <strong>ASP.NET<\/strong> like <strong>MVC 5<\/strong> apps, <strong>Web API 2<\/strong> services or older versions, as these images have <strong>IIS<\/strong> installed already.<\/p>\n<h2>SUMMARY<\/h2>\n<p>Here\u2019s a summary table:<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"801\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"199\"><b>Image Repo<\/b><\/td>\n<td valign=\"top\" width=\"140\"><b>Framework<\/b><\/td>\n<td valign=\"top\" width=\"129\"><b>Linux support<\/b><\/td>\n<td valign=\"top\" width=\"142\"><b>Windows support<\/b><\/td>\n<td valign=\"top\" width=\"189\"><b>When to use it<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"199\"><a href=\"https:\/\/hub.docker.com\/u\/microsoft\/\">microsoft<\/a>\/<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet\/\">dotnet<\/a><\/td>\n<td valign=\"top\" width=\"140\">.NET Core<\/td>\n<td valign=\"top\" width=\"129\">Debian  <\/p>\n<p>Alpine (Soon)<\/p>\n<\/td>\n<td valign=\"top\" width=\"142\">NanoServer<\/td>\n<td valign=\"top\" width=\"189\">\u00b7 .NET Core Console apps and generic processes, on Linux or NanoServer  <\/p>\n<p>\u00b7 ASP.NET Core apps on .NET Core and NanoServer<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"199\"><a href=\"https:\/\/hub.docker.com\/u\/microsoft\/\">microsoft<\/a>\/<a href=\"https:\/\/hub.docker.com\/r\/microsoft\/aspnetcore\/\">aspnetcore<\/a><\/td>\n<td valign=\"top\" width=\"140\">.NET Core<\/td>\n<td valign=\"top\" width=\"129\">Debian  <\/p>\n<p>Alpine (Soon)<\/p>\n<\/td>\n<td valign=\"top\" width=\"142\">Soon<\/td>\n<td valign=\"top\" width=\"189\">Provides ASP.NET Core optimizations  <\/p>\n<p>\u00b7 ASP.NET Core on .NET Core and Linux<\/p>\n<p>\u00b7 (Soon) ASP.NET Core apps on .NET Core and NanoServer<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"199\"><a href=\"https:\/\/hub.docker.com\/r\/microsoft\/dotnet-framework\/\">microsoft\/dotnet-framework<\/a><\/td>\n<td valign=\"top\" width=\"140\">.NET Framework<\/td>\n<td valign=\"top\" width=\"129\">NO<\/td>\n<td valign=\"top\" width=\"142\">Windows Server Core<\/td>\n<td valign=\"top\" width=\"189\">\u00b7 .NET Framework apps: Console, WCF, WF, and generic processes on Windows Server Core<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"199\"><a href=\"https:\/\/hub.docker.com\/r\/microsoft\/aspnet\/\">microsoft\/aspnet<\/a><\/td>\n<td valign=\"top\" width=\"149\">.NET Framework<\/td>\n<td valign=\"top\" width=\"152\">NO<\/td>\n<td valign=\"top\" width=\"181\">Windows Server Core<\/td>\n<td valign=\"top\" width=\"279\">\u00b7 ASP.NET (like MVC 5 and Web API 2) or older on Windows Server Core<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In addition to the mentioned repos which are the main ones for .NET-Docker development, there are other base images (like the IIS image, Windows images, etc.) and additional complementary repos for sample apps that I\u2019m not covering here. These are those:<\/p>\n<p>microsoft\/dotnet-nightly<\/p>\n<p>microsoft\/dotnet35<\/p>\n<p>microsoft\/aspnetcore-build-nightly<\/p>\n<p>microsoft\/aspnetcore-build<\/p>\n<p>microsoft\/dotnet-samples<\/p>\n<p>microsoft\/sample-dotnet<\/p>\n<p>microsoft\/dotnet-framework-samples<\/p>\n<p>microsoft\/iis<\/p>\n<p>microsoft\/nanoserver<\/p>\n<p>microsoft\/servercore<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Even when these official images are still evolving, I think that a summary about the multiple Microsoft Docker images for .NET available at Docker Hub would be a \u201cnice to have\u201d thing. This blog post is related to my previous blog post on \u201cDocker containers \u2013 Should I use .NET Core or .NET Framework?\u201d, however [&hellip;]<\/p>\n","protected":false},"author":362,"featured_media":12806,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[8,10,21,38,43],"class_list":["post-5955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cesardelatorre","tag-net-core","tag-net-framework","tag-asp-net-core","tag-containers","tag-docker"],"acf":[],"blog_post_summary":"<p>Even when these official images are still evolving, I think that a summary about the multiple Microsoft Docker images for .NET available at Docker Hub would be a \u201cnice to have\u201d thing. This blog post is related to my previous blog post on \u201cDocker containers \u2013 Should I use .NET Core or .NET Framework?\u201d, however [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts\/5955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/users\/362"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/comments?post=5955"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/posts\/5955\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/media\/12806"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/media?parent=5955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/categories?post=5955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cesardelatorre\/wp-json\/wp\/v2\/tags?post=5955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}