在Azure Service Fabric解决方案中通过Docker Container发布ASP.NET MVC项目

时间:2017-09-06 08:33:12

标签: asp.net azure-service-fabric docker-container

这是一个非常基本的问题。 Microsoft在任何地方都宣传lift and shift approach,这意味着您可以将旧的ASP.NET MVC项目(Cloud Service Webroles)迁移到Docker容器中,以便在Service Fabric(SF)上进行首次发布,并且稍后只能将它们转换为本机ASP.NET Core。

不幸的是,在整个描述中没有任何地方如何做到这一点:

  • First example Lift and Shift:Microsoft将旧Webproject放入容器的主要广告。但他们只使用一些特殊的" 持续交付"出版的方法没有帮助。
  • Approach with VS Docker Compose support:仅限如何将单个容器发布为自包含应用程序。但它不允许将容器嵌入整个SF项目中与其他服务。此外,它不能与我在1号机上创建的Docker-Compose一起使用,可以发送到集群上并以某种方式在集群上执行。但是仍然无法从外部访问webapp。
  • Tutorial how to containerize and include container into SF Solution:将容器纳入解决方案的正确方向。不幸的是,它们容纳的webproject不是一个完整的ASP.NET Webproject。它只是一个python脚本。因此,在这种情况下,他们可以轻松创建一个docker文件。
  • ASP.Net Core Docker Tutorial from the Docker docs:这里解释了如何创建一个比单个python脚本更复杂的容器。但是,本教程仅包含一个ASP.NET核心项目,并使用了一个" dotnet发布"原始ASP.NET中不存在的指令!?
  • 将ASP.NET MVC应用程序从旧的Cloud Services迁移到SF的所有其他教程不幸地解释了立即升级到ASP.NET Core(例如Herehere

我迷路了。我认为策略应该是编写一个自己的docker文件并手动创建一个容器,如4中所示,然后按照3将该容器嵌入到SF解决方案中。最后问题是:如何编写Dockerfile来容纳ASP.NET MVC项目?

3 个答案:

答案 0 :(得分:2)

首先回答最终问题: ASP.NET MVC的dockerfile示例:

FROM microsoft/aspnet:4.6.2
WORKDIR /inetpub/wwwroot
COPY /publish .

这会将/ Pub目录的Web Publish输出复制到容器中。

为了扩展您在上面添加的链接,有一些重要的容器概念:

  • Docker文件(描述如何构建容器的文件)
  • Docker撰写(一个可以描述如何构建和运行多个容器的文件) - 单个容器不需要
  • Docker主机(在操作系统上运行并可以提取容器图像并运行它们的服务)
  • Container Registry(当Docker主机需要运行时,容器映像存在并从中获取)
  • Visual Studio容器工具(帮助您创建docker文件和docker组合文件,并与docker主机集成以在本地调试和运行容器)
  • 您在上面的子弹一中引用的CI集成(Visual Studio Team Services和Visual Studio帮助您配置如何构建容器并将其推送到容器注册表)
  • Orchestrators(用于以类似阴天的方式运行容器的花哨的多节点内容。在解决方案中运行多个容器时为您提供可靠性和扩展性 - 也就是节点集群 - Service Fabric和Kubernetes是这里的选项。)

根据上面的四颗子弹将上述内容放在上面:

  • 提升和转移:作为CI / CD的简单端到端解决方案 管道是为您创建的。包含以上所有内容。那里 这是一个视频,从第一个链接走过这个场景 上图:https://channel9.msdn.com/events/Build/2017/T6001
  • 使用VS Docker的方法撰写支持:由上面使用 手动将docker compose文件推送到Service Fabric,其中 指示Service Fabric从a中提取和运行容器 容器注册。
  • 教程如何将容器封装并包含在SF解决方案中: 解释如何在不使用docker compose或Visual的情况下实现此目的 工作室(您可以选择)
  • 来自Docker文档的ASP.Net核心Docker教程:如何构建 一个容器。

答案 1 :(得分:0)

其他想要手动构建自动创建的dockerfile的标记:

自动生成的.dockerignore file会忽略除obj\Docker文件夹之外的所有内容。如果您publish manually和您的发布文件夹不同,这就是为什么您的引用可能找不到,尽管您在dockerfile中正确设置它们。

答案 2 :(得分:0)

另一个提示:

在您自己的群集上发布解决方案时要注意,您必须在负载均衡器中手动设置转发规则。默认情况下,仅转发端口19000和19080。任何教程都没有提到这一点。您只能找到在in depth explanations中添加平衡规则的信息。