Docker容器化趋势目前已经进入了快速发展阶段,关于Docker容器数据中心级别大规模应用集群及编排管理,应用微服务化都是业界广泛讨论的议题;不过除了上述热点以外,对于容器化最为开发运维人员推崇的,莫过于DevOps开发测试场景的对应:开发,构建,运行,保证配置运行环境及打包代码转移运行的一致性!不过之前多数情况下,我们看到的Docker打包并非开发工具直接集成的,需要开发运维人员手工编写,现在已经开始逐渐过渡和改观,对.NET开发者而言Visual Studio 2015 Tools for Docker - August Preview目前在公开预览阶段,已经更新到了0.7 Beta版;目前通过这个工具开发者可以轻松的将开发的ASP.NET 5 Web或控制台应用代码构建并发布到运行在Azure公有云中的虚拟机容器中,在通过ASP.NET跨平台的前提下目前支持Linux或Windows两种内核虚拟机。当然本人设想的场景是发布到云中的测试环境,如果测试过程没有问题,之后就可以将同样的构建程序包和环境配置文件转交给运维人员进行生产部署。

这么令人兴奋的功能,还是让我们一起体验一下:

环境准备:


    • 企业版

    • 专业版

    • 社区版

(*目前只支持英文版本,这里要注意目前预览版还不支持多语言版,所以如果是中文版的VS 2015还是再耐心等等吧)

  • 预览阶段VS Tools for Docker还没有做好ASP.NET和Web工具依赖关系,本人就在测试中吃了这个亏,没有注意需要预装工具包,因此在VS 2015中无法选择在Azure上创建新的Docker虚拟机,参考了这篇文章才发现了问题所在。

扩展工具的主要功能:

  • 安装Docker 1.8.1 Windows命令行工具集,如果Windows本地没有安装的话VS 2015工具会帮助安装,借助Docker的工具VS 2015扩展工具才能实现对于Docker容器的管理和部署。

  • 自动生成Azure Docker虚拟机资源模板用于在Azure上创建内置Docker功能的Linux/Windows 虚拟机用于承载Web或控制台程序。

  • 在当前用户环境自动生成Docker TLS安全通信及管理证书用于远程管理Azure端托管的Docker虚拟机环境。

  • 打包应用程序并生成Dockerfile用于构建应用程序基础映像。

准备环境就绪以后,可以开始进行测试了;

1. 首先创建一个ASP.NET Web应用程序,

2. 接下来,选择ASP.NET预览版应用模板,此模板会通过NuGet下载项目所需引用的跨平台库DNX,打包配置工具NPM, Bower等,

(*注意此时不要勾选部署到Web App中)

3. 项目建好之后,我们就可以尝试发布了:)选择发布应用

4. 在扩展工具安装之后,我们可以此时看到Docker Container选项,当然这里我们要选择通过容器方式发布,选择它;

5. 接下来,如果我们在Azure上没有Docker虚拟机环境,我们可以选择创建新的Azure Docker虚拟机(这里可是坑了我很长时间,希望看了上面预装环境,大家不会碰到类似问题)

6. 这里可以根据实际Azure环境选择订阅,位置,映像文件(这里选择的是最新的Windows Server 2016 TP3的Windows内核容器环境),尺寸,虚拟机用户凭据等,注意如果之前没有在当前用户环境创建过证书文件,扩展工具内置的PowerShell脚本会检测到并帮助你创建用于Docker环境TLS管理的证书文件到该目录下,并且这样通过Docker工具或脚本连接资源时,就可以通过默认证书配置连接了。

(*注意,目前此功能只能支持国际版的Azure环境,对于国内Azure版本我们还需要耐心等待)

7. 我们选择完成之后,其实可以从当前Web工程中看到扩展工具为我们生成的构建Docker虚拟机资源组的配置文件*.json,及默认参数配置文件*.param.dev.json;另外还会生成证书文件创建及应用Docker虚拟机模板创建Docker虚拟机环境的脚本文件;

8. 开始创建虚拟机资源组,泡杯咖啡耐心等待,直到虚拟机创建成功等待我们部署我们的Web应用。

9. 我们可以通过PowerShell验证一下是否资源已经创建好了;

Switch-AzureMode -Name AzureResourceManager Get-AzureResource -Name DemoAsp5Net -OutputObjectFormat New Name              : demoasp5net ResourceId        : /subscriptions/3cf430da-bda2-4739-b6c8-44092933335b/resourceGroups/demoasp5net/providers/Microsoft.                     Compute/virtualMachines/demoasp5net ResourceName      : demoasp5net ResourceType      : Microsoft.Compute/virtualMachines ResourceGroupName : demoasp5net Location          : westus SubscriptionId    : 3cf430da-bda2-4739-b6c8-44092933335b Tags              : {System.Collections.Hashtable}

10. 接下来,我们可以在此虚拟机上部署我们的测试Web应用了,再次选择发布选项;此时如果Dockfile部分没有文件,没有关系,扩展工具会帮助我们创建用户创建基础Docker映像的Dockfile;点击Validate Connection确认此时已经可以连接到Azure上的Docker虚拟机环境;

11. 选择发布后,扩展工具会通过gulp/Grunt,DNU.CMD打包Web应用程序,并通过Dockfile和Docker命令行工具创建映像文件;之后通过映像文件创建容器并按照我们在上一步制定的映射端口映射容器到外部,测试中发现其实包括Azure外部的端点Endpoint映射也帮我们做好了,还真是事半功倍啊!

12. 全部部署完成之后,我们可以点击output中的应用URL访问网站并验证是否ASP.NET应用已经部署成功,


13. 此时如果愿意,也可以在测试机上连接Azure上的Docker环境并查看容器运行时环境:



行文至此,这个Docker集成工具就先到这里吧,希望对公有云,.NET跨平台以及容器应用有兴趣的朋友可以自行体验:)