商标设计注意事项,seo优缺点,扬州建设工程招标信息网,站长工具亚洲高清译者序#xff1a;其实过去这周我都在研究这方面的内容#xff0c;结果周末有事没有来得及总结为文章#xff0c;Scott Hanselman就捷足先登了。那么我就来翻译一下这篇文章#xff0c;让更多的中文读者看到。当然Scott遇到的坑我也遇到了。 不过首先#xff0c;对于不熟悉… 译者序其实过去这周我都在研究这方面的内容结果周末有事没有来得及总结为文章Scott Hanselman就捷足先登了。那么我就来翻译一下这篇文章让更多的中文读者看到。当然Scott遇到的坑我也遇到了。 不过首先对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念。 由于容器成为虚拟化和应用托管的一种不可避免的选项Windows也开始为公众提供容器功能其实微软具备和使用容器技术很久了。这样的容器功能在内部的引擎通过两种方式来实现内核级别仅Windows Server 2016支持和Hyper-v级别Windows 10和Windows Server 2016支持。但是对外的接口和标准又遵循Docker的这样的好处是Windows容器生态可以和现有的Linux容器生态很好的结合。所以Windows容器称之为Docker on Windows。Windows容器的出现为传统的Windows服务端应用程序的容器化开启了新天地比如把Qlik Sense的服务器放到容器中来即时编排集群。 而之前Docker公司也针对Windows 10推出过利用Hyper-V来跑一个Linux虚拟机作为容器宿主主机的发行版本。那个称之为Docker for Windows。 所以在Windows 10上你可以同时安装Docker for Windows和Docker on Windows只是不能同时运行两者。两者默认的安装目录不同但是客户端即Docker.exe是同名的所以我把on版本的客户端执行文件改了个名字就可以两个一起用了。其实客户端虽然版本不同但是基本的命令还是都是兼容的用其中一个就够了。因为Docker Deamon在两者中都是同样的访问地址。 Scott Hanselman的文章地址为http://www.hanselman.com/blog/ExploringASPNETCoreWithDockerInBothLinuxAndWindowsContainers.aspx 我是译文正文开始的分隔符 在去年5月的时候使用ASP.NET和Docker来折腾一些事情还步履蹒跚。不过伟大之处就是我们一直在进步。我曾经就写过一篇博客文章来展示如何把ASP.NET 5当时还称之为5呢现在已经改名为Core 1.0了应用发布到Docker中。后来在2015年11月类似Docker Toolbox和Kitematic这样的新工具让事情变得更加容易。在2016年5月Docker for Windows Beta继续让这件事情易如反掌。 那么来到2016年10月这个时候我们来看看如何使用ASP.NET Core、Docker和Windows来进行开发。 我安装了如下东西 Visual Studio Community 2015Visual Studio 2015 Update 3 ASP.NET Core with .NET Core.NET Core 1.0.1 - VS 2015 Tooling Preview 2 Docker for Windows 我使用Beta通道Visual Studio Tools for Docker Docker for Windows真的非常好它可以自动为你配置好Hyper-V创建一个Docker宿主OS并启动好这个虚拟机。节约了大量的时间。 这是我的Linux宿主我无需太多关心它的情况。我将会通过命令行或Visual Studio来完成所有事情。 首先通过File | New Project来创建一个运行在.NET Core中的ASP.NET Core应用程序。 接着在项目名称上点击右键并选择Add | Docker Support。这一菜单来自Visual Studio Tools for Docker扩展。这个步骤会添加基本的Dockerfile和其他docker-compose文件。通过这样的开箱即用的步骤我就完成了所有的配置从而能够把ASP.NET Core应用程序部署到Docker Linux容器中。 ASP.NET Core运行在Docker Linux容器中 从我这个ASP.NET Core应用当中我们可以看到其使用的基础镜像就是Dockerfile中的FROM语句是Linux的ASP.NET Core镜像。 FROM microsoft/aspnetcore:1.0.1ENTRYPOINT [dotnet, WebApplication4.dll]ARG source.WORKDIR /appEXPOSE 80COPY $source . 接下来由于我不希望Docker编译我的应用程序只想发布到本地。可以阅读Steve Laske的博客文章Building Optimized Docker Images with ASP.NET Core来了解如何在一个容器中构建应用程序而在其他容器中运行。这样做优化了服务器的使用率和资源。 我将通过如下命令行指令来发布、构建镜像并运行它。 dotnet publishdocker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonlinux docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEaspnetcoreonlinux latest dab2bff7e4a6 28 seconds ago 276.2 MBmicrosoft/aspnetcore 1.0.1 2e781d03cb22 44 hours ago 266.7 MBdocker run -it -d -p 85:80 aspnetcoreonlinux1cfcc8e8e7d4e6257995f8b64505ce25ae80e05fe1962d4312b2e2fe33420413docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1cfcc8e8e7d4 aspnetcoreonlinux dotnet WebApplicatio 2 seconds ago Up 1 seconds 0.0.0.0:85-80/tcp clever_archimedes 到此我的ASP.NET Core应用就可以运行在Docker中了。我们现在已经尝试了一个Docker容器它是托管在Windows中通过Hyper-V来运行的Linux宿主中。 我们还可以做点别的什么呢 ASP.NET Core运行在一个运行着Windows Nano Server的Docker Windows容器中 有这样一种Windows Server称之为Windows Server Core它删除了UI相关的东西有这样一种Windows Server称之为Windows Nano Server它让Windows缩减到只有几百M而不是几G。这意味着从所需功能和服务器使用率的角度看这是一个非常好的选择让你部署的空间占用尽可能的小。 让我来看一下我是否能把ASP.NET Core通过Kestrel【译者注ASP.NET Core的跨平台Web服务器实现】运行到Windows Nano Server中。当然由于Nano功能强大我也能在这个容器中运行IIS这里有文档说明。 来自Docker公司的Michael Friis有一篇很棒的博客文章描述了在Windows Server容器中构建和运行Docker应用。在安装了最新版的Docker for Windows之后你就可以通过上下文菜单来在Linux和Windows容器间切换。 那么现在我就来用用Windows容器的Docker。你可能还不知道你已经拥有Windows容器了它已经和Windows 10周年更版本一起发布了。你可以在Windows特性对话框中启用容器功能 我将修改一下Dockerfile来使用Windows Nano Server镜像。我也可以在Docker内部通过环境变量和Expose命令来控制ASP.NET暴露的端口。 FROM microsoft/dotnet:nanoserverENTRYPOINT [dotnet, WebApplication4.dll]ARG source.WORKDIR /appENV ASPNETCORE_URLS http://:82EXPOSE 82COPY $source . 接着我发布并构建…… dotnet publishdocker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonnano 然后运行它映射Windows外部端口到Windows容器内部 注意在Windows 10通过“NAT”网络地址转换来和容器通讯的时候有一个Bug你不能如你我所愿的那样直接通过 http://localhost:82 来访问容器应用。你不得不通过容器本身的IP来访问。一旦听到这个Bug的更多消息和被修复的情况我会及时公布在这里。它应该会通过Windows Update在几天内出现。从Docker得到容器的IP地址的方法为docker inspect -f {{ .NetworkSettings.Networks.nat.IPAddress }} HASH 那么我将通过如下命令在Windows Nano Server中运行我的ASP.NET Core应用再次说明一下它将运行在Windows 10的Nano Server容器内。 docker run -it -d -p 88:82 aspnetcoreonnanoafafdbead8b04205841a81d974545f033dcc9ba7f761ff7e6cc0ec8f3ecce215docker inspect -f {{ .NetworkSettings.Networks.nat.IPAddress }} afa172.16.240.197 现在我可以通过172.16.240.197:82来访问这个站点。一旦上面的Bug被修复后我们就能像其他容器那样访问它了。 Windows容器的最美好的一面就是它非常快和轻量级。一旦镜像被下载下来在机器上构建好那么你通过Docker来启动和停止它们都是秒完成。 不过你也可以通过如下命令来使用Docker隔离Windows容器 docker run --isolationhyperv -it -d -p 86:82 aspnetcoreonnano 如此一来实例完全是通过Hyper-v本身来隔离运行的。你可以获得世界上最好的东西速度、方便的部署加上可选且便捷的隔离。 ASP.NET Core运行在一个运行着Windows Server Core的Docker Windows容器中 接下来我把Dockerfile修改为使用完整的Windows Server Core镜像。在下载安装这个镜像后其占用大约8G的空间需要花一点时间来下载和解压不过它确实是真正的Windows。你也可以选择运行为一个容器或者隔离的Hyper-V容器。 这里我通过修改FROM语句来使用包含了.NET Core的Windows Sever Core FROM microsoft/dotnet:1.0.0-preview2-windowsservercore-sdkENTRYPOINT [dotnet, WebApplication4.dll]ARG source.WORKDIR /appENV ASPNETCORE_URLS http://:82EXPOSE 82COPY $source . 注意我听说使用Windows Sever Core的.NET Core镜像有可能会取消。因为让.NET Core运行在Windows Nano Server或其他轻量级镜像中更有意义。你应该把Sever Core用于那些更加笨重的应用。如果你真的需要运行在Sever Core的.NET Core你可以制作自己的Dockerfile来轻易构建你所要的镜像。 接下来我将再次发布、构建和运行。 docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEaspnetcoreonnano latest 7e02d6800acf 24 minutes ago 1.113 GBaspnetcoreonservercore latest a11d9a9ba0c2 28 minutes ago 7.751 GB 由于容器能够非常快的启动和停止所以我可以利用跑在容器中的Redis、一个SQL容器和包含其他部分的第三个容器来跑一个完整的Web集群。或者混合并配对。 docker psCONTAINER ID IMAGE COMMAND PORTS NAMESd32a981ceabb aspnetcoreonwindows dotnet WebApplicatio 0.0.0.0:87-82/tcp compassionate_blackwella179a48ca9f6 aspnetcoreonnano dotnet WebApplicatio 0.0.0.0:86-82/tcp determined_stallman170a8afa1b8b aspnetcoreonnano dotnet WebApplicatio 0.0.0.0:89-82/tcp agitated_northcuttafafdbead8b0 aspnetcoreonnano dotnet WebApplicatio 0.0.0.0:88-82/tcp naughty_ramanujan2cf45ea2f008 a7fa77b6f1d4 dotnet WebApplicatio 0.0.0.0:97-82/tcp sleepy_hodgkin 总结 再次让我们阅读Michae的另外一篇文章他使用Docker Compose来把ASP.NET Music Store示例跑在一个Windows容器中而SQL Express跑在另外一个中以及Steve Lasker的博客文章实际上他的整篇文章都是金矿中提到的为ASP.NET Core制作一个优化的Docker镜像。 IMAGE ID RESPOSITORY TAG SIZE0ec4274c5571 web optimized 276.2 MBf9f196304c95 web single 583.8 MBf450043e0a44 microsoft/aspnetcore 1.0.1 266.7 MB706045865622 microsoft/aspnetcore-build 1.0.1 896.6 MB Steve提到了大量的技巧让你可以解决Docker和ASP.NET Core在一起的大部分问题。 所有的一切意味着IMHO你可以把ASP.NET Core用在 在Linux中跑ASP.NET Core在Docker容器里面在任何云平台中 在Windows,、Windows Server、Server Core和Nano Server中跑ASP.NET Core在Docker的Windows容器里面在Docker的Hyper-V隔离容器里面 这意味着你可以选择任意特性支持和为服务器使用率和便捷度优化过的尺寸大小。一旦所有的工具Docker for Windows和Visual Studio Docker Tools准备妥当我们就能拥有良好的调试环境和从开发到生产的工作流支持。 你在使用Docker、容器和ASP.NET Core进行开发了吗希望在评论中看到你们的声音。 内容转载自公众号 dotNET每日精华文章 了解更多