本文的作者是谷歌的Azure平台的工程师,今年年末谷歌就宣布开源.Net核心运行时,并与Mono合作以加快.Net在Linux等非Windows平台的移植。同时,谷歌也宣布将在新一代的Windows服务器上支持Docker,支持容器化布署,这让我们看见了谷歌拥抱开源的决心。本文介绍了怎样在Linux中使用Docker容器布署基于ASP.NET5的应用程序。
作为ASP.NET5跨平台布署实现的一部份,我们正在为简化ASP.NET应用布署、兼容Linux或则MacOSX等操作系统运行而努力工作。近来,我们发布了首个ASP.NET的Docker镜像:ASP.NET5预览版Docker镜像。
Docker是一个开源的项目,目的是在Linux操作系统下轻松的以沙箱的形式运行应用程序。当你下载了ASP.NET5的Docker镜像,你就有了一个才能运行ASP.NET5应用程序的Linux环境;如今你所要做的仅仅是在这个镜像中添加你的应用程序linux docker使用,之后启动一个容器,运行它,发布它。
本教程中我们为你展示怎样在谷歌Azure云上借助Docker在Linux操作系统中布署一个使用ASP.NET5预览版编撰的简单的Web应用程序。这个教程中的事例可以在Linux、MacOSX或则所有能装Docker顾客端的操作系统下运行(假如喜欢,你也可以远程登陆Linux虚拟机运行)。其实,当你安装了Docker的Windows顾客端,你能够在Windows上运行本文中的事例。之后,假如WindowServer支持容器化布署了,你还能使用Docker在WindowsServer中来管理WindowsServer的容器了。
注:文中所有的演示流程与代码都是基于ASP.NET5(vNext)预览版的,在即将发布后运行的方法可能会有所不同。所以,待会儿假如读者须要晓得怎样使用Docker布署ASP.NET5的应用程序,还请自行登入ASP.NET5的DockerHub页面或则GitHub库房去参看最新的布署文档。第一步:创建运行环境现今Docker还只能在Linux上运行,所以你必须找一台Linux机器或则装了Linux虚拟机的机器来运行Docker;你在这儿可以找到Docker的安装步骤或则通过参考这篇文章GettingStartedwithDockerOnAzure(在Azure云端安装Docker的起步教程)。其实你可以从Azure云获取一个安装好Docker的Linux虚拟运行环境。
这个教程假定你已然在Azure上有了安装好Docker的Linux虚拟机。假如你拥有其它类似的运行环境,那这个教程也是可以使用的。
第二步:为你的ASP.NET5应用创建一个Docker镜像为了能让ASP.NET应用程序在云端布署,你须要一个Docker镜像来承载你的应用。
Docker镜像的文件系统是层叠式的(AUFS文件系统),可以这样形象的理解:你的应用程序只是“基础镜像”上层新加的一个层而已(译者注:如同建房子一样,新增的楼层是基于它下边的楼层构建上去的),而在我们的反例中“基础镜像”为microsoft/aspnet(译者注:这是一个Docker镜像的名称linux认证,这个镜像存在于DockerHub中)。在Docker中镜像的层级是增量叠加上去的(译者注:这点跟Git原理一样),Docker保存了每位层之间的差别,所以当我们用Docker布署应用时,递交的更新不会包含Linux发行版内核或则ASP.NET的运行时,由于这种都早已存在于“基础镜像”中了,你只会递交基于此“基础镜像”构建的应用程序本身,所以Docker的这些差别化递交、部署机制才能确保应用程序以最快速、最小化的增量形式进行布署,为运维带来极大的便利。
怎样创建Docker镜像呢?答案是使用:Dockerfile。跟Makefile相像,Dockerfile包含了供Docker拿来建立一个镜像的所有步骤。
本教程所用到的ASP.NET源代码可以从GitHub的aspnet/Home库房下的HelloWeb目录提取。首先,使用如下命令将源代码从GitHub上克隆出来:
git clone git@github.com:aspnet/Home.git aspnet-Home
切换到aspnet-Home的sample目录下:
cd aspnet-Home/samples/HelloWeb
完成后目录结构应当如下所示:
├── Startup.cs ├── image.jpg └── project.json
之后我们在此目录下创建一个名叫Dockerfile的文件linux docker使用,并输入如下指令:
FROM microsoft/aspnet COPY . /app WORKDIR /app RUN ["kpm", "restore"] EXPOSE 5004 ENTRYPOINT ["k", "kestrel"]
让我们逐字解释此Dockerfile中命令的涵义:
第三步:创建镜像当我们编撰完Dockerfile后,当前目录应当是如下结构,Dockerfile和程序源代码在一起:
├── Dockerfile ├── Startup.cs ├── image.jpg └── project.json
如今我们来创建此Docker镜像。这个过程十分简单——运行Docker的build命令即可,命令如下:
docker build -t myapp .
这条命令运行结束后Docker就生成了一个名为myapp的镜像;同时,你对镜像所做的任何变化都能通过重新运行此命令来世成一个新的镜像。在你的Linux虚拟机或则开发环境中运行dockerimages命令可以看见我们刚才创建的myapp镜像了:
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE myapp latest ccb7994d2bc1 39 seconds ago 499.8 MB microsoft/aspnet latest 16b1838c0b34 12 days ago 473.4 MB
你可以看见你的应用镜像以及ASP.NET镜像都存在于你的主机上。
如今我们开始讲怎样将ASP.NET应用程序布署到云端。
第四步:运行容器运行一个容器特别的简单linux 下载,通过运行以下命令可以在你的开发机上启动myapp容器:
docker run -t -d -p 80:5004 myapp
看!我们早已在Linux中使用Docker容器运行ASP.NET5的应用程序了!(今译:屌炸了!)
其实,假如你要建立一个比我们演示程序更复杂的业务系统,你须要学会编撰Dockerfile来建立愈加复杂的镜像,你可以参考这儿。
推论我们会持续为ASP.NET5能更好的运行在Linux的Docker容器中而不断的努力、投入;同时,我们很高兴为你带来谷歌在DockerHub上的首个官方镜像:ASP.NET5PreviewImage.
其实,本教程依赖预览版的ASP.NET5与预览版的Docker镜像,所以随着时间与开发进度的推动,本文的指令可能会过时。所以读者可以通过登陆DockerHub或则GitHub库房来获取最新的镜像与程序版本。
你也可以在GitHub上给我们反馈,以帮助我们改善Docker镜像与ASP.NET5。
原文链接:RunningASP.NET5applicationsinLinuxContainerswithDocker(翻译:肖劲审校:李颖杰)
来自: