Docker和Octopus Deploy有哪些不同?

14

我一直使用Octopus Deploy将Web应用程序部署到AWS EC2实例中。我知道Octopus Deploy是特定于.NET的,与Docker相比学习曲线较简单。我理解使用Docker的一个要点是创建容器而不是使用虚拟化程序来创建虚拟机。

但我的问题是,为什么要使用Docker而不是Octopus Deploy?哪个更适合部署应用程序?它们是否做不同的事情?

1个回答

23

很好的问题。它们有不同的功能和工作方式,但在它们解决的问题上有一些重叠。Octopus是关于发布已构建的应用程序- Docker是将应用程序构建为自包含的包,您可以将其作为容器进行发布和运行。

免责声明: 我是Docker Captain(Docker社区认可计划),并且我一直在投入大量时间研究Docker。我对它有偏见,因为我认为它是非常棒的技术- Octopus也很不错,但范围较小。如果您想了解更广泛的Docker概述,请参考我最近在Channel 9上谈论它

使用Octopus,您可以将已编译的ASP.NET Web应用程序部署到服务器上。使用Octopus Library,您可以使用模板设置应用程序平台作为部署的一部分,配置IIS,运行Windows服务等。但是,您的服务器需要预先设置好先决条件(.NET、IIS等),需要安装Octopus代理才能运行部署,并且需要Octopus服务器进行协调。
使用Docker,您可以将已编译的ASP.NET Web应用程序构建成一个映像-这是一个包含整个应用程序堆栈的单个逻辑单元。映像中包含IIS和ASP.NET、您的应用程序、应用程序的依赖项以及所有配置。您可以将映像推送和拉取到Docker注册表(共享映像存储),并在安装了Docker的任何Windows机器上运行应用程序。您的主机不需要安装IIS或ASP.NET-它们都在映像中,您也不需要额外的基础设施,Docker只需在主机上作为Windows服务运行即可。
Docker可以运行您的应用程序,并构建和发布它们。应用程序在容器中运行,这是主机上轻量级、隔离的沙盒。您可以在同一主机上运行具有不同版本的.NET、不同版本的IIS甚至不同版本的Windows的应用程序容器,而不会相互影响。
您可以将一个应用程序分成多个容器,它们都可以在虚拟网络中相互访问,您可以使用Docker Compose来定义部分和它们之间的关系,从而捕获复杂的分布式解决方案。您可以将多个主机组合成一个Docker Swarm,从而实现易于扩展、故障转移和滚动升级。您还可以使用商业版的Docker Datacenter产品来管理所有映像、主机和容器,并安全地访问它们。

哇,非常感谢您提供如此详细的答案!我认为我现在已经成为了一个Docker爱好者。所以,简单来说,我将不需要在服务器上手动安装所有项目依赖项,例如IIS、ASP.Net等,而是将这些依赖项放在一个镜像中,该镜像可以被推送到注册表中,然后我可以在任何服务器上使用这个镜像……我想优点就是如果我想将我的应用程序推送到新服务器上,我就不必再次进行整个依赖项的安装。 - floormind
没错。使用Docker,您的基础设施要求是(机器+网络+Docker)。您可以使用Docker Hub来获取您的镜像,这是一个公共注册表,或者在本地运行您自己的注册表。 - Elton Stoneman
好的,我的问题是关于CI的问题,我提交后是否需要在Teamcity中运行构建和单元测试,并且这是否意味着我需要将其与构建应用程序到Docker容器并部署容器分开处理? 对我而言,通常的过程是编写代码,提交,使用teamCity进行构建,在teamCity中运行测试,使用octopack创建包,使用Octopus Deploy部署包。 但是,如果您说Docker会发布已编译的版本,那么这意味着在将应用程序放入容器以进行发布之前,我必须完成所有这些步骤吗? - floormind
正确,你仍然像以前一样在TeamCity中进行所有预打包工作。 - 9swampy
感谢这篇(旧的)解释。本周参加了哥本哈根的DockerCon,看到了你的演讲并花了很多时间在“使用Docker”轨道上。我们也大量使用Octopus,并将我们的部署流程整合到了这里。但我从未与您讨论过Docker是否可以完全替代像Octopus这样的东西...长期来看,这似乎是最有价值的方法。 - Hulvej
如果Docker可以捆绑不同版本的操作系统,是否存在许可证问题? - Burndog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接