Windows Server容器初探 ASP.NET容器化

前言:

本文为Windows Server环境下的容器体验纪实文章,旨在跟大家分享一些体会和经验,相关视频演示及说明后续更新,欢迎大家一起加群讨论。

 

注:文章由有容云原创,转载请注明出处

 

一.Windows容器概述

 

当今世界,容器技术越来越火热,微软也终于通过Windows Server 2016进军容器市场。Windows 容器包括两个不同的容器类型:

 

1.Windows Server容器

 

通过进程和命名空间隔离技术提供应用程序隔离。Windows Server容器与容器主机共享内核。

 

2.Hyper-V 容器

 

通过在高度优化的虚拟机中运行每个容器,容器主机的内核不与Hyper-V容器共享。下图大致反映了Windows容器的一些基本原理:

 

 

Windows 容器可以通过Powershell或是Docker进行管理,我们关注的重点在Docker方面。

 

二.试验环境

 

此次试验在一台服务器上的Hyper-V VM中进行。

操作系统:Windows Server 2016 TP4(英文版)

硬件配置:Intel Xeon E5-2650 v3、内存128G、硬盘 500G固态+1.5T机械

Hyper-V VM: Windows Server 2016 TP4(英文版)

用户权限:管理员

 

三.具体步骤

 

1 .安装Hyper-V VM并准备Windows容器运行环境

 

Windows容器的运行需要依赖于容器操作系统基础镜像;微软提供了一个Powershell脚本,执行该脚本成功后会创建一个Hyper-V虚拟机,同时在该虚拟机中安装好Windows容器所需要的所有依赖和配置。

以下是具体步骤:

 

1.1 检查物理机Hyper-V服务是否安装;如果没有,需要先安装。

 

 

1.2. 以管理员身份运行PowerShell。

C:\> powershell.exe

 

 

1.3. 检查是否存在虚拟交换机,如果没有请先创建一个。

1.4. 下载安装脚本。

wget -uri https://aka.ms/tp4/New-ContainerHost -OutFile c:\New-ContainerHost.ps1

1.5. 下载完成后执行该脚本

c:\New-ContainerHost.ps1 –VmName cloudsoar27 -WindowsImage ServerDatacenterCore -Hyperv

该脚本执行的时候会创建Hyper-V虚拟机,下载并配置Windows容器组件。由于下载量较大,网速慢,需耐心等待。 也可以使用已经下载好的文件(如下图):

 

 

 

注意那两个文本文档,是脚本判断下载是否结束的依据,如果缺失会提示错误的版本。在这里感谢@盆盆大神提供的镜像,省去了我们多少个漫漫长夜的等待!

:镜像下载路径为:http://pan.baidu.com/s/1dDXjTDZ
  •  

 

2.Docker命令兼容性测试

 

Windows Server容器支持以Docker原生命令进行操作,本次所测试的命令包括build, commit, create, exec, images ,logs, ps, pull, rename, restart, rm, rmi, run , start, stop, version等,均能正常执行(commit的速度有点慢)。官网上明确指出dockerhub相关命令不支持。尝试docker login命令得到如下结果:

 

 

可以使用docker search * 列出可用镜像列表(事实上把*换成任意字符串比如’asdfasdfasdf’,依旧会得到以下列表)

 

 

docker pull命令只能拉取以上列表中的镜像,类似docker pull redis的命令会得到如下结果:

 

 

上周我在物理机上(也是本次这台服务器)直接搭建过Windows Container的运行环境,测试时发现容器中的命令行比较“脆弱”,容易发生显示错位、命令自动拼接到上一条的情况。有时候创建带有交互式命令的容器时进去后会立马退出,在容器中安装服务时会卡住不动(甚至使用get-windowsfeature web*之类的查看命令也会卡住)。在Hyper-V VM 中除了有时启动带有交互式终端命令的容器它会自动退出这个问题依然存在外,其他问题暂时还未发现。看来Windows Server Container在Hyper-V虚拟机中的稳定性比在物理机上好。

 

3. Windows Server Core+IIS+.NET框架基础镜像

 

Windows容器也支持commit与Dockerfile两种方式构建镜像,本节主要介绍使用Dockerfile的方式构建Windows Server Core+IIS+.NET Framework基础镜像,后续将在该镜像的基础上构建ASP.NET应用,如下是Dockerfile文件内容。

 

      

Dockerfile主要在Windowsservercore的基础上安装了.NET Framework 3.5,IIS 10.0 以及asp相关应用开发组件。最先用commit方式构建镜像的时候,在容器中安装web-asp-net失败的原因已经找到了,应该是安装web-asp-net需要依赖.NET Extensibility 3.5,如果这个组件没有安装就会先装这个,但是这个组件依赖于.NET Framework 3.5. 在Windowsservercore启动的容器中默认安装的.NET Framework 版本为4.0而不是3.5,导致web-asp-net安装失败,所以要先安装.NET Framework 3.5。这里装多个版本主要是为了兼容不同版本的asp.net应用,当然也可以根据需要选择性安装。

docker build -t iisbase c:\iisbase

 

4 部署ASP.NET应用

 

本节基于3中创建的基础镜像iisbase构建ASP.NET应用镜像,Dockerfile如下:(source为使用vs2015发布的一个简单的asp.net示例应用。)

 

 

使用docker run --name test -it -p 8080:80 asp45demo cmd创建容器。然后通过192.168.0.179:8080(Hyper-V VM IP)访问。

 

 

有一个比较令人困惑的地方就是镜像的大小,感觉太‘重’了点。

注:Windowsservercoreiis为commit构建,安装了web-server,web-asp,web-asp-net45。iisbase为Dockerfile构建,安装了web-server,web-asp,web-asp-net45,.net 3.5, web-asp-net。如果不需要支持低版本的asp.net应用,基于Windowsservercoreiis会小不少。

 

 

四.总结

 

Windows Server Container在Hyper-V VM中的表现比直接在物理机上搭建Docker环境好上不少,常用功能基本都有了。等后续进一步完善Docker命令的兼容性、容器的稳定性以及丰富应用镜像之后,相信市场前景还是很不错的,期待正式版的推出。后续将进一步探究如何使用Windows容器实现开发、测试以及生产的一体化流程,敬请期待!

 

本文电子书下载:

云盘下载:http://pan.baidu.com/s/1jHfP9Dc

网页下载:http://www.youruncloud.com/help/115.html

博客期刊:http://www.youruncloud.com/blog/0_3.html

 

 

分享:Windows Server容器初探 ASP.NET容器化

有容云-构筑企业容器云 www.youruncloud.com

温馨提示

对Docker容器技术或容器生产实施感兴趣的朋友欢迎加群讨论。我们汇集了Docker容器技术落地实施团队精英及业内技术派高人,在线为您分享Docker技术干货。我们的宗旨是为了大家拥有更专业的平台交流Docker实战技术,我们将定期邀请嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

加微信群方法:

1.关注【有容云】公众号

2.留言”我要加群”

QQ群号:454565480

有容云微信二维码