【问题标题】:Difference between containers (Docker) and IIS容器(Docker)和 IIS 之间的区别
【发布时间】:2015-05-20 18:29:14
【问题描述】:

我正在学习容器(主要是 Docker),因为它正在进入 Windows。而且好处似乎与 IIS 非常相似。

我在防火墙后面为我的公司(业务线)构建应用程序。我们有一堆虚拟机,每个虚拟机都托管一系列 Web 服务。 一个 VM 可以在 IIS 上运行 20 多个服务。

在那种情况下,通过 Docker 部署我的服务对我有什么好处,而我还没有使用 IIS?

注意:我对 Docker 完全陌生,并且只有 IIS 开发人员级别的经验。

【问题讨论】:

  • 你只关心网站吗?

标签: windows iis docker


【解决方案1】:

Docker 不是 IIS 的替代品 - 它可以在容器中运行类似 IIS 的应用程序(我假设 - 不确定这将如何在 Windows 上运行)。

Docker 更像是虚拟机的替代品 - 虚拟机和 Docker 容器之间的最大区别在于 Docker 容器比完整的虚拟机轻得多。您看到的通常说法是,您可以在主机上运行比 VM 更多的 Docker 容器(但您的里程可能会有所不同 - 有些说法有点......夸大了)。

基本上,这个想法是这样的:VM 是一个完整的虚拟机 - 一个运行在虚拟硬件之上的真实操作系统(对于操作系统来说看起来足够真实)。因此,您将获得操作系统的所有花里胡哨,包括运行 IIS 或其他 HTTP 服务器时可能不需要的东西。

另一方面,Docker 只使用主机的操作系统,但利用操作系统的一些有用功能将容器中运行的进程与主机的其余部分隔离开来。因此,您可以在没有整个操作系统开销的情况下隔离 VM(在出现故障或安全时很有用)。

现在您可以在单个 Docker 容器中运行“20 多个服务”,但通常不建议这样做。因为 Docker 容器非常轻量级,您可以(而且应该!)将它们限制为每个容器一个服务。这会给您带来诸如

之类的好处
  • 关注点分离:您的数据库容器就是这样 - 一个数据库。没有其他的。此外,它只处理正在使用它的应用程序的数据。

  • 提高了安全性:如果您想以这种方式进行设置,则只能从使用该数据库的应用程序访问您的数据库容器。

  • 安装的东西有限:你的数据库容器应该只运行 MySQL - 没有 SSH 守护程序,没有 Web 服务器,没有其他东西。简单干净,每个容器只做一件事。

  • 可移植性:我可以配置我的图像,将它们拉到新主机上,然后启动容器,我将保证在新主机上拥有与旧主机上完全相同的环境。这对开发非常非常有用。

这并不是说您不能使用 VM 设置类似的东西 - 您当然可以 - 但想象一下应用程序中每个组件的完整 VM 的开销。

例如,我最近的主要项目是一个在 Apache 上运行的 Web 应用程序,它带有一个 MySQL 数据库、一个 redis 服务器和三个微服务(每个都是在 Lighttpd 上运行的简单独立 Web 应用程序)。想象一下为这个应用程序运行六个不同的服务器。

【讨论】:

  • 所以现在我有一台虚拟机在 IIS 中运行 7 个服务。如果我想切换到 Docker,是否让该 VM 现在运行 7 个 docker 容器?每个托管一项服务?还是我需要让 docker 在较低级别运行?也许“在金属上”? (我怀疑我的系统管理员会喜欢我想要让任何东西在 VM 之外运行。他们通过 VM Ware 管理所有东西,并且通常非常反对任何不允许他们使用这些工具的东西。)
  • @Vaccano 你应该明白 Docker 不能用于运行 Windows(而 Docker 客户端可以)。假设您使用 Linux,Docker 倾向于为部署提供便利(每个服务一个容器)——它不会“启动”一个完整的系统,而是将所有内容沙箱化并运行该过程。
  • 也许您可以将 IIS 替换为 Web 服务器(例如 nginx、Apache、Lighttpd、H2O...),并将您的 7 个服务放在 7 个容器中,每个容器启动一个 Web 服务器。虽然你可以在docker中运行各种Windows软件(只要你安装了wine和必要的东西)IIS不能用wine运行forum.winehq.org/viewtopic.php?f=8&t=23699
  • 目前,您可以在 Windows 机器上的虚拟机中运行 docker - 这就是我们在办公室所做的。来宾 VM 正在运行 Ubuntu 14.04 + Docker 和 SSH。该虚拟机目前运行大约 8 个应用程序(每个应用程序由一个或多个 Docker 容器组成)和 2 个微服务(每个容器一个)。主机是 Windows Server 2003(我认为)和 Microsoft 的管理程序。至于为 7 个服务运行 7 个 Docker 容器,您可以这样做——架构非常灵活,您当然可以进行不同的配置。
  • 最后,当他们发布适用于 Windows 的 Docker 时,我想 IIS 将成为首批支持的应用程序之一。
【解决方案2】:

Docker 容器增加了对 .NET、SQL Server 和其他与 IIS 集成的工作负载的支持。您还可以从 docker 可移植性中受益,因为您可以获取容器映像并在 AWS 或 Azure 上以及私下运行它们。而且,您可以访问基于 docker 的大型工具生态系统。 . .归根结底,业界正在转向支持 Docker API。

【讨论】:

    【解决方案3】:

    要在容器中的 IIS 上托管 Web 应用程序,一个好的起点是使用最新的 IIS docker 映像来托管在 IIS 上的应用程序,或者如果 ASP.NET 或 WCF 是目标平台,则使用来自这两个平台又包括 IIS:

    https://hub.docker.com/r/microsoft/iis/

    https://hub.docker.com/r/microsoft/aspnet/

    https://hub.docker.com/r/microsoft/wcf/

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 2021-07-18
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多