Docker 运行在Linux上,可能你已经了解很多,但运行在windows上呢,本文来试一下部署一个静态文件在IIS上,目的不在于练习docker, 而在于让你了解windows的一些镜像
一、前提条件
需要在windows上安装docker,然后切换到windows 容器。
你基本初步了解docker
二、为.NET 容器选择目标操作系统
下图展示了取决于应用程序所用的.NET Framework 版本,用户可以选择的操作系统版本。
在迁移基于.NET Framework 的现有或遗留应用程序时,主要依赖项包括 Windows 和 IIS。 此时只能选择基于 Windows Server Core 和.NET Framework 的 Docker 镜像。 在将镜像名称加入 Dockerfile 文件的过程中,可以使用标签选择操作系统与版本,例如通过 下列标签可选择基于.NET Framework 的 Windows 容器镜像:
下面是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 主机(虚拟机或服务器)。
四、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. 在本机上访问,结果如下:
(三)创建并部署一个基于.net framework的mvc应用程序
首先使用Visual studio创建一个传统的asp.net
创建完成之后,结构如下:
,它是基于http.sys的web服务器的,接下来直接加一个dockerfile打包成一个镜像。
FROM microsoft/aspnet
workdir "c:\inetpub\wwwroot"
copy . .
expose 81
将dockerfile与编译后的文件放在一起,如下:
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 ,显示的效果如下:
参考文档
查看所有支持Windows的镜像: https://hub.docker.com/r/microsoft/dotnet/