Docker on Windows: 为.NET 容器选择目标操作系统

Docker 运行在Linux上,可能你已经了解很多,但运行在windows上呢,本文来试一下部署一个静态文件在IIS上,目的不在于练习docker, 而在于让你了解windows的一些镜像

一、前提条件

需要在windows上安装docker,然后切换到windows 容器。

你基本初步了解docker

二、为.NET 容器选择目标操作系统

下图展示了取决于应用程序所用的.NET Framework 版本,用户可以选择的操作系统版本。

Docker on Windows: 为.NET 容器选择目标操作系统_第1张图片

在迁移基于.NET Framework 的现有或遗留应用程序时,主要依赖项包括 Windows 和 IIS。 此时只能选择基于 Windows Server Core 和.NET Framework 的 Docker 镜像。 在将镜像名称加入 Dockerfile 文件的过程中,可以使用标签选择操作系统与版本,例如通过 下列标签可选择基于.NET Framework 的 Windows 容器镜像:

Docker on Windows: 为.NET 容器选择目标操作系统_第2张图片

Docker on Windows: 为.NET 容器选择目标操作系统_第3张图片

下面是dotnetcore镜像:

  • microsoft/dotnet——适用于 Linux 和 Nano Server 的 .NET Core 运行时 和 SDK 镜像。
  • microsoft/aspnetcore — 适用于 Linux 和 Nano Server 的ASP.NET Core 镜像。
  • microsoft/aspnetcore-build——适用于 Linux 和 Nano Server 的 ASP.NET Core 镜像,用于构建应用程序。
  • microsoft/iis——适用于 Nano Server 的IIS镜像。

下面是dotnet-framework镜像:

  • microsoft/dotnet-framework——适用于 Windows Server Core 的 .NET Framework 3.5 和 4.6.2 镜像。
  • microsoft/aspnet——适用于 Windows Server Core 的 .NET Framework 3.5 和 4.6.2 ASP.NET 镜像。

我们也在 Docker Hub 上发布了示例,以便大家可以更加容易地使用。

  • microsoft/dotnet-samples——.NET Core 示例。
  • microsoft/dotnet-framework-samples——.NET Framework 示例。

各种容器的名称和标签太多了,不太好记,总结一下:

  • 微软是爱linux的,如果没有显示说明是nanoserver,那容器默认是基于于linux的Docker主机。

  • .Net Core是发展方向,没有明确说明是.Net Framework的,那容器默认是.Net Core的。

  • 对于Web或Web API的.Net Core项目,建议使用microsoft/aspnetcore

三、决策表:什么情况下,在 Docker 中使用怎样 的.NET 框架

下表概括总结了应该使用.NET Framework 或.NET Core 的决策因素。请务必注意,Linux 容器必须使用 基于 Linux 的 Docker 主机(虚拟机或服务器),而 Windows 容器必须使用基于 Windows Server 的 Docker 主机(虚拟机或服务器)。

Docker on Windows: 为.NET 容器选择目标操作系统_第4张图片

四、Demo

(一)使用Muti-stage build的方式创建一个WindowServerCore的镜像

参考这里

 

(二)创建一个Nano Server 的IIS镜像

1. 写一个Dockerfile

FROM microsoft/iis
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html

2. 运行命令,生成image

docker build -t wucong60/iis-dockerfile .

3. 部署容器

docker run -d -p 80:80 wucong60/iis-dockerfile

4. 在本机上访问,结果如下:

Docker on Windows: 为.NET 容器选择目标操作系统_第5张图片

(三)创建并部署一个基于.net framework的mvc应用程序 

首先使用Visual studio创建一个传统的asp.net

Docker on Windows: 为.NET 容器选择目标操作系统_第6张图片

 创建完成之后,结构如下:

Docker on Windows: 为.NET 容器选择目标操作系统_第7张图片

,它是基于http.sys的web服务器的,接下来直接加一个dockerfile打包成一个镜像。


FROM microsoft/aspnet
workdir "c:\inetpub\wwwroot"
copy . .
expose 81

将dockerfile与编译后的文件放在一起,如下:

Docker on Windows: 为.NET 容器选择目标操作系统_第8张图片

PS C:\Users\Administrator\Desktop\Demo> docker build -t wucong60/mvcdemo .
Sending build context to Docker daemon  27.26MB
Step 1/4 : FROM microsoft/aspnet:4.7.1
 ---> 3b5cbec4eca1
Step 2/4 : workdir "c:\inetpub\wwwroot"
 ---> Running in 93db8d119042
Removing intermediate container 93db8d119042
 ---> 97b18b167959
Step 3/4 : copy . .
 ---> b4b35d836fcb
Step 4/4 : expose 80
 ---> Running in ca4e577938f5
Removing intermediate container ca4e577938f5
 ---> dd0cf25f483b
Successfully built dd0cf25f483b
Successfully tagged wucong60/mvcdemo:latest


PS C:\Users\Administrator\Desktop\Demo> docker run -itd -p 85:80 wucong60/mvcdemo --name myinstance
128e79eba4e12c695e950d431dc6442d9f25003b020ac7e040c6a2e57f80c5f6


PS C:\Users\Administrator\Desktop\Demo>

可以看到这里使用的基础镜像是microsoft/aspnet ,显示的效果如下:

Docker on Windows: 为.NET 容器选择目标操作系统_第9张图片

 

参考文档

https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/net-core-net-framework-containers/net-container-os-targets 

查看所有支持Windows的镜像: https://hub.docker.com/r/microsoft/dotnet/ 

你可能感兴趣的:(Docker,Docker,for,windows)