做为一名.NET Developer,这几年看着docker的流行实在是有些眼馋。惋惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连php程序员均可以docker了,本身还在苦哈哈的装虚拟机,实在是急啊!因此对于.NET Core的发展格外关注,由于它的跨平台,意味着.NET Developer也能够docker了。php
前世此生
.NET core 1.0并非对原有的.net平台的升级,而是一次全新的重写,这个开发过程微软也前所未有的采用了全面开源的作法,在github上接受全球开发者的pull request。从上图能够看出,.NET core与现有的.net framework是并行的,是彻底独立发展的一套开发平台。与以前的.net framework最大的区别在于跨平台,同时支持Windows/macOS/Linux 这三大操做系统。在GitHub上.NET Core的发布时间线能够看到在过去的2年里,微软一步步的将.NET 从Windows操做系统上剥离,逐步添加了对macOS和Linux操做系统的支持,同时与开源社区的合做也在逐步加深。html
– 2014年7月 - 微软在github上发布了asp.net vNext(也就是asp.net 5)的前身,这时仍是alpha阶段
– 2014年11月 - 发布了beta1,而且开始使用asp.net 5的名称
– 2015年10月 - 发布了beta8,这是最后的一个beta版本,这一年的时间里,微软逐步提供了对于macOS和Linux操做系统的支持;同时随着 Visual Studio Code 这个跨平台代码编辑器的流行,你们慢慢开始关注asp.net 5
– 2015年11月 - 发布了RC1,标志着asp.net 5基本具有了使用在生产环境的能力
– 2016年6月27日 - 在RedHat全栈开发者大会DevNation上,微软与RedHat携手发布了Asp.net Core 1.0,标志着微软这一跨平台开发工具的正式发布。java
为何是Docker?
咱们再来看看docker,这个2013年才发布的开源项目从一开始就引发了全球开发者的极大关注,在发布4个月的时间里下载量就超过50000次, github上收到超过4000个star,涌现了超过100个贡献者,而且有超过150个项目和超过1000个产品开始使用docker。1年以内,RedHat和AWS就宣布为Docker提供官方支持,在这样大的关注下,连Docker本身的CEO都劝说全球的开发者暂时不要将Docker用于生产环境。2014年6月,Docker发布了1.0版本,这时Docker的下载量已经超过275万,到今天这个数字已经超过了10亿。node
为何小编对docker如此垂涎,此话要从“修电脑”提及。做为一名程序员,谁没有修过电脑,谁没有被叫去修过电脑,谁没有被认为很会修电脑 … … 但是,你有想过为啥咱们这样擅长修电脑么?难道真的是由于泡妹子么?那都是副产品好么!!!python
故事 … … 一个月前接了一个项目,用的是XXX技术,搭建好了环境,热火朝天干了一个月;今天项目经理说这里还有另外项目的一些小问题须要处理,你来看看吧,用不了多少时间。结果你发现这个项目用的是YYY的技术,搭建环境就化了你半天时间,这时候项目经理电话来了:“为啥还没搞完?啥,环境还没搞好,算了,你别搞了,我找别人!“。好吧,苦逼的你回去继续原来的项目,发现XXX环境的变量被YYY搞乱了,改了好久也搞很差 … … 结果就是:从!装!电!脑!git
程序员就这样变成装机高手!再后来的程序员开始使用虚拟机,把开发环境放到虚拟机中,这样就不用担忧不一样环境之间互相冲突,不过虚拟机动辄几十个G的硬盘占用和巨大的CPU和内存开销让电脑变得慢吞吞的,原本i7的机器只能享受到i3的性能,太浪费了。程序员
这就是为啥docker成为了全球程序员的福音:github
– 没必要担忧新接手的项目环境搭建复杂;
– 没必要担忧同时开发2个环境互相冲突的项目;
– 不会再占用大量的内存和硬盘,环境启动迅速,启动一个容器只须要几秒钟,而虚拟机须要几分钟;就算是8G内存也能够同时跑多个容器,而虚拟机能跑2个就不错了;
– 直接把作好的应用丢给测试,测试没必要本身再重新搭建环境,要恢复干净的测试环境也只是一个命令而已;
– 直接把测试好的应用丢给运维去部署,不用去和运维撕扯 jdk 1.8仍是1.7
– 环境坏掉了,换个新的,不用费劲去看log,恢复这恢复那
– 不用担忧你旁边的程序员用了不一样版本的jdk,他的环境就是你的环境,哪怕你用的本本上是win7,他在用高大上的macbook prodocker
这不是程序员的天堂么? 这就是docker带给咱们的,这就是为啥程序员们急不可耐的开始使用docker,并且愿意冲破阻力让运维去接受docker,这种事情在历史上好像没有出现过;历来都是运维要求开发使用标准化环境的。shell
其实Docker所解决就是一直困扰每一名IT人的环境不统一问题;这个问题随着各类技术,框架和平台的爆炸性增加最终成为应用开发效率的终极杀手,让开发者和企业付出巨大的努力和金钱。不管是从组织和流程层面的ITSM,仍是从敏捷化角度推行的DevOps,或是自动化(如:Chef/Puppet等)都没有跳出这个问题所造成的漩涡。这些方法或者工具试图用复杂的方法来适应复杂的环境,而Docker则是用一种逆向思惟的方式来解决这个问题,用简单的方法来解决复杂的问题,颇有点四两拨千斤的感受!
为啥它的名字叫作Docker:由于Docker所使用的容器技术(Containers)就来自于运输行业的集装箱(Containers)的思路。运输行业在60年代遭遇了一样的问题,你们但愿运送的物品各式各样,尺寸不一,这给运送过程形成了极大的麻烦。这就如同咱们须要将不一样环境,不一样版本的应用从开发运送到测试,再运送到生产。
因而集装箱开始出现,运输公司将不一样尺寸的物品装入统一的集装箱,这样不管是卡车,码头机械,飞机和轮船的货仓均可以按照标准化的集装箱尺寸进行设计,极大的提升了效率,下降了成本。Docker在这里就起到了这个集装箱的做用,让开发人员能够按照须要将环境和应用装入容器,而测试和运维人员只须要运送和装载。
Docker借用了集装箱运输的思路,将应用所须要的全部环境一同打包,同时采用轻量级的虚拟化技术在操做系统之上提供一个相对隔离的运行时空间。这样,开发人员就能够直接完成依赖环境与应用自己的打包,而测试/运维人员只须要进行装载操做。
开发环境选择
要使用Docker来开发.NET Core应用程序,你能够选择本身喜欢的操做系统和工具,在这个系列文章里面,我会介绍2个最多见的开发环境
– Windows + Visual Studio 2015 + Docker for Windows
– macOS + Visual Studio Code + Docker for Mac
部署环境上,我将使用微软的Azure和亚马逊的AWS来实现测试和生产环境的部署,而且借助Visual Studio Team Service 做为DevOps工具链来实现从开发-测试-生产的发布管道(Release Pipeline)的创建。
Docker 世界,你好!
今天我先来看看最简单的场景,在Windows 10上面搭建Docker for Windows 开发环境,并使用Visual Studio 2015和Docker for Visual Studio插件来完成一个.net Core 应用的建立和调试。
你能够经过这段5分钟的视频了解如下运行效果,若是须要了解详细步骤,请看下面的说明:
1. 在 Windows 上面安装 Docker for Windows
Docker for Windows是Docker公司为使用Windows的开发人员提供的开发和测试环境,他的前身是Docker Toolbox。Docker for Windows和Docker Toolbox的区别在于前者使用Hyper-V提供虚拟化支持,Docker Toolbox使用VirtualBox。所以,若是你使用的是Windows 10操做系统,你可使用Docker for Windows,若是使用的是更老的操做系统,则可使用Docker Toolbox。
能够从如下地址下载这2个工具:
https://docs.docker.com/engine/installation/windows/
在这篇文章里面我使用的是 Docker for Windows 和 Windows 10的环境,Docker for Windows 对 Windows 10的版本也是有要求的,最低须要 Version 1511 (OS Build 10586)以上才能够,你能够在经过winver命令来查看本身的版本信息。
安装过程很是简单,直接双击下载好的安装包,一直下一步就能够完成。在这个过程当中,若是你的机器尚未启用Hyper-V,安装程序会自动启用。若是你的Windows 10原本就是一台虚拟机,那么根据你所使用的虚拟化工具的不一样,能够启动虚拟化嵌套,也就是在虚拟机里面运行虚拟机。
安装好之后必定要记得要使用管理员权限启动 Docker for Windows,不然 Docker for Windows 将没法与Hyper-V控制台通信,形成环境启动失败。
Docker for Windows 启动成功后会弹出系统通知,
同时在Hyper-V 控制台中能够看到一台LinuxVM正在运行。
以上过程能够看出,Docker for Windows的工做机制其实是在 Hyper-V 中运行了一台运行了Docker Daemon (驻守程序)的虚拟机,并将Windows上运行的Docker命令行工具指向了这台虚拟机中的docker环境。而对于开发者而言,咱们只须要在Windows上运行cmd或者powershell命令行,就可使用一样的docker 命令进行操做了。
2. 安装 Docker for Visual Studio 插件
Visual Studio 强大的开发和调试能力对于提高效率有很大的帮助,为了可以提供基于docker的开发调试体验,微软提供了一个 Docker Tools for Visual Studio 插件。
若是你尚未安装 Visual Studio 2015,能够在如下地址下载最新的社区版,这个版本彻底免费,同时也支持加载插件。
https://www.visualstudio.com/products/visual-studio-community-vs
安装好之后,打开 Tools | Extensions and Update 菜单,输入 docker 进行搜索,就能够找到这个插件:
插件下载地址:
https://visualstudiogallery.msdn.microsoft.com/0f5b2caa-ea00-41c8-b8a2-058c7da0b3e4
3. 准备 .NET Core 环境
首先,进入 .NET Core 的 Windows 环境主页 ,按照要求下载和安装 .NET Core 1.0 for Visual Studio,下载地址以下
https://go.microsoft.com/fwlink/?LinkId=817245
安装后就能够在Visual Studio 中建立.NET Core 应用了。
4. 在 Visual Studio 2015 中建立.NET Core Web App
点击 File | New | Project …,打开项目建立引导,并选择 ASP.NET Core Web Application (.NET Core) 项目类型
在模板页中选择 Web Application 模版,并点击OK,进行建立
建立完成后 Visual Studio 会自动运行dotnet restore命令恢复项目依赖,等待这一过程完成,而后按F5测试一下,正常状况下你能够看到如下初始的网站状态。
5. 启用 Docker Support,并使用Docker环境进行调试
在项目节点上右键单击,并选择 Add | Docker Support
这时,你项目里面会多出如下2部份内容
(1)这里是对Visual Studio 进行配置,确保 Visual Studio 的工具链会正确与 docker 环境集成
(2)这里是对Docker本身的环境配置,包括 Dockerfile 和 Docker Compose file (这部分的具体内容在后续的文章中给你们介绍),另外还有一个 DockerTask.ps1。
DockerTask.ps1 是一个 powershell 脚本,Visual Studio 和 Docker 的交互其实都是经过这个脚原本完成的,这里贴出这个脚本的参数部分,你会看到脚本中对经常使用的docker命令又进行了一层封装,让docker能够更好的配合Visual Studio的工具链调用。这个脚本很是有用,特别是在没有 Visual Studio 的状况下,你彻底能够借助这个脚本手动完成工具链的构建。
如今,你会发如今 Visual Studio的运行状态栏中多了一个 Docker 的选项,意味着咱们能够直接点击这个按钮或者F5,就能够将应用部署到本地的 Docker for Windows 环境,并开始调试了。
运行起来的效果以下
你能够看到我在Controller里面添加了一行代码来获取本地的机器名,在容器里面获取到的就是这个容器的id,同时在这里还能够设置断点;在docker中运行的应用会中断,你能够像调试一个普通的ASP.NET应用同样来调试这个运行在Docker中的应用。
本文仅仅是 Docker for .NET Developer (D4D) 系列的开始,你们能够看到借助Visual Studio一向强大的开发和调试能力和Docker的环境隔离能力,能够大大提升开发效率。后续还将为你们介绍如何在macOS上使用Docker进行开发,同时借助 VSTS 的 DevOps 工具链支持完成云端的Docker环境集成。
本文中所使用的工具备些须要FQ才能才能正常下载,小编将她们整理了一下放在云盘上,供你们高速下载;须要的朋友请公众号关注公众号 devopshub ,并在消息中输入 d4dtools 获取下载地址,谢谢!
请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息