docker4dotnet #1 – 前世今生 & 世界你好

作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋。可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连php程序员都可以docker了,自己还在苦哈哈的装虚拟机,实在是急啊!所以对于.NET Core的发展格外关注,因为它的跨平台,意味着.NET Developer也可以docker了。

前世今生

.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操作系统的支持,同时与开源社区的合作也在逐步加深。

– 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,标志着微软这一跨平台开发工具的正式发布。

为什么是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亿。

为什么小编对docker如此垂涎,此话要从“修电脑”说起。作为一名程序员,谁没有修过电脑,谁没有被叫去修过电脑,谁没有被认为很会修电脑 … … 可是,你有想过为啥我们这样擅长修电脑么?难道真的是因为泡妹子么?那都是副产品好么!!!

故事 … … 一个月前接了一个项目,用的是XXX技术,搭建好了环境,热火朝天干了一个月;今天项目经理说这里还有另外项目的一些小问题需要处理,你来看看吧,用不了多少时间。结果你发现这个项目用的是YYY的技术,搭建环境就化了你半天时间,这时候项目经理电话来了:“为啥还没搞完?啥,环境还没搞好,算了,你别搞了,我找别人!“。好吧,苦逼的你回去继续原来的项目,发现XXX环境的变量被YYY搞乱了,改了很久也搞不好 … … 结果就是:从!装!电!脑!

程序员就这样变成装机高手!再后来的程序员开始使用虚拟机,把开发环境放到虚拟机中,这样就不用担心不同环境之间互相冲突,不过虚拟机动辄几十个G的硬盘占用和巨大的CPU和内存开销让电脑变得慢吞吞的,本来i7的机器只能享受到i3的性能,太浪费了。

这就是为啥docker成为了全球程序员的福音:

– 不必担心新接手的项目环境搭建复杂;

– 不必担心同时开发2个环境互相冲突的项目;

– 不会再占用大量的内存和硬盘,环境启动迅速,启动一个容器只需要几秒钟,而虚拟机需要几分钟;就算是8G内存也可以同时跑多个容器,而虚拟机能跑2个就不错了;

– 直接把做好的应用丢给测试,测试不必自己再从新搭建环境,要恢复干净的测试环境也只是一个命令而已;

– 直接把测试好的应用丢给运维去部署,不用去和运维撕扯 jdk 1.8还是1.7

– 环境坏掉了,换个新的,不用费劲去看log,恢复这恢复那

– 不用担心你旁边的程序员用了不同版本的jdk,他的环境就是你的环境,哪怕你用的本本上是win7,他在用高大上的macbook pro

这不是程序员的天堂么? 这就是docker带给我们的,这就是为啥程序员们急不可耐的开始使用docker,而且愿意冲破阻力让运维去接受docker,这种事情在历史上好像没有出现过;从来都是运维要求开发使用标准化环境的。

其实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环境集成。

本文中所使用的工具有些需要翻墙才能才能正常下载,小编将她们整理了一下放在云盘上,供大家高速下载;需要的朋友请公众号关注公众号 devopshub ,并在消息中输入 d4dtools 获取下载地址,谢谢!



请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

?

时间: 2024-10-13 20:51:30

docker4dotnet #1 – 前世今生 & 世界你好的相关文章

世界你好! 个人网站搭建过程

这几天花了点时间,在西部数码购买了个服务器,使用WordPress4.0中文版构建了这个博客,安装文件你可以在这里下载 http://pan.baidu.com/s/1EnnFw.搭建过程分享给大家! 搭建一个网站你需要了解一下几个知识点: 1.服务器或者虚拟服务器:你可以把它简单的理解为一台24小时提供服务的电脑,它可以存储你需要的数据,比如网站程序,图片,文件,视频等等. 2.域名: 这个很简单,就是一个名字而已,举个简单的例子 www.baidu.com 这就是一个域名,而我的网站域名就是

当 Swoole 遇上 ThinkPHP5 世界你好

本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境 安装 Swoole PECL 拓展 可以通过 pecl 命令或者通过源码包编译安装,本文采用 pecl 命令来安装 Swoole在命令行输入 $ > pecl install swoole 安装 Swoole PECL 拓展,执行命令后通过php -m命令来检查 Swoole 是否安装成功,如果返回的拓展列表中包含swoole则表明已经安装成功,也可以通过phpinfo来检查 Swoole 是

docker4dotnet

docker4dotnet #1 – 前世今生 & 世界你好 作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连php程序员都可以docker了,自己还在苦哈哈的装虚拟机,实在是急啊!所以对于.NET Core的发展格外关注,因为它的跨平台,意味着.NET Developer也可以docker了. 前世今生 .NET core 1.0并不是对原有的.

Visual Studio Code和Docker开发asp.net core和mysql应用

Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看看. .net猿上了小鲸鱼渡轮就先问了一个问题,苹果园上有能用来编写c#代码的和Visual Studio一样强大的IDE么?这时,天空闪过一道Gamma射线,艾瑞克神说,给你一个 Visual Stud

使用Azure云存储构建高速 Docker registry

使用Azure云存储构建高速 Docker registry 使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情,虽然国内的一些docker社区也提供了所谓的加速器,但是实测结果并不理想.今天这篇文章就给大家介绍一下怎么借助Azure Storage来搭建一个高速的私有 Docker Hub (Registiry). 一图解千言,基本上一看你就明白了

docker10件事

docker – 你应该知道的10件事 容器并不是一个全新的技术,但这并不妨碍Docker如风暴一样席卷整个世界. 如果你在IT圈里,你一定听说过Docker.就算与其他热门技术,如:Puppet/Chef,Hadoop或者MongoDB放在一起,Docker仍然让你耳目一新. 不过就算Docker现在怎样的如日中天,这并不意味着它一定适合你.就如同我在这篇 Tech Pro Rearch 的分析文章中读到的一样,“对于是否要采用Docker作为企业的未来技术方向,你需要的是谨慎!” 在你决定尝

DevOps - Development And Operations

简介: 研发运维一体化 相关资料: 关于DevOps你必须知道的11件事 我眼中的DevOps DevOps 门户 docker for dotnet系列 docker4dotnet #1 前世今生 & 世界你好 docker4dotnet #2 容器化主机 docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用 docker4dotnet #4 使用Azure云存储构建高速 Docker registr

Win10上运行Docker

1. 前言 Docker最近推出了可以运行在Win10和Mac上的稳定版本,让我们赶紧来体验一下. Docker发布Mac和Windows 的目标非常简单--开发者可以更加简单方便地在研发机器上使用Docker.下面是此次版本所改进的地方: 更快更可靠--在本地开发环境上,使用虚拟监控程序(hypervisors)就可以植入每个操作系统(无需VirtualBox): 改进了Docker工具集成--开发者可以把所有的Docker工具绑定在本地应用程序上: 改进开发流程--大量的装备可用于代码和数据

docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道

在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景.Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的能力,今天这篇文章将对如何使用微软的全生命周期管理平台VSTS/TFS来构建基于容器的CI/CD管道来支持团队开发的场景. #1 前世今生 & 世界你好#2 容器化主机#3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用#4 使用Az