容器(Docker)和 IIS 的区别

27

我正在学习有关容器(主要是 Docker)的知识,因为它已经在 Windows 上使用。这些好处似乎与 IIS 很相似。

我在公司内部开发应用程序(业务线),在防火墙后面工作。我们有一堆 VM,每个 VM 都将托管一组 Web 服务。一个 VM 可以在 IIS 上运行 20 多个服务。

在这种情况下,使用 Docker 部署我的服务会带给我什么不同于使用 IIS 的好处呢?

注意:我对 Docker 完全没有了解,只有在 IIS 开发方面的经验。


你只关注网站吗? - usr
3个回答

22

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

Docker更像是虚拟机(VM)的替代品 - VM和Docker容器之间最大的区别在于Docker容器比完整的VM轻得多。通常声称的是,您可以在主机上运行比VM更多的Docker容器(但是您的效果可能会有所不同 - 一些声明有些夸张)。

基本思想是:VM是完整的虚拟机 - 运行在虚拟硬件上的真实操作系统(对于OS而言,看起来足够真实)。因此,您将获得操作系统的所有功能,包括您可能不需要的内容,如果您正在运行IIS或其他HTTP服务器。

另一方面,Docker仅使用主机的操作系统,但利用操作系统的一些有用功能,以使容器中运行的进程与主机的其余部分隔离开来。因此,您获得了一个VM的隔离(如果某些内容失败或出于安全原因有用),而不需要整个操作系统的开销。

现在,您可以在单个Docker容器中运行“20个以上的服务”,但通常不建议这样做。由于Docker容器非常轻巧,您可以(并应该!)将它们限制为每个容器一个服务。这样做可以带来以下好处:

  • 关注点分离:您的数据库容器只是数据库。没有其他东西。此外,它仅处理使用它的应用程序的数据。

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

  • 安装有限的内容:您的数据库容器应仅运行MySQL - 没有SSH守护进程,没有Web服务器,没有其他内容。简单明了,每个容器都只做一件事。

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

  • 这并不是说你不能使用虚拟机来设置类似的东西 - 你当然可以 - 但想象一下为应用程序中的每个组件运行一个完整的虚拟机所需的开销。

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


    现在我有一个运行7个IIS服务的虚拟机。如果我想切换到Docker,那么改变是让该虚拟机现在运行7个Docker容器吗?每个容器托管一个服务?还是我需要在更低的层次上运行Docker?也许是“裸机”上?(我怀疑我的系统管理员会不喜欢我想要在VM之外运行任何东西。他们通过VM Ware管理所有内容,并且通常非常反对任何不允许他们使用这些工具的事情。) - Vaccano
    @Vaccano 你应该明白,Docker不能在Windows上运行(虽然Docker客户端可以)。假设你使用的是Linux,Docker往往为部署提供便利(每个服务一个容器)--它不会“启动”完整的系统,而是将所有内容隔离并运行进程。 - xuhdev
    1
    也许你可以用一个Web服务器(如nginx、Apache、Lighttpd、H2O等)替换IIS,并将7个服务放在7个容器中,每个容器启动一个Web服务器。虽然你可以在Docker中运行各种Windows软件(只要安装了Wine和必要的东西),但是IIS不能在Wine上运行。https://forum.winehq.org/viewtopic.php?f=8&t=23699 - user2915097
    1
    目前,您可以在Windows机器上的虚拟机中运行Docker - 这就是我们在办公室里正在做的事情。客户端VM正在运行Ubuntu 14.04 + Docker和SSH。该VM当前正在运行约8个应用程序(每个应用程序由一个或多个Docker容器组成)和2个微服务(每个容器一个)。主机是Windows Server 2003(我想)和Microsoft的hypervisor。至于为7个服务运行7个Docker容器,您可以这样做 - 架构非常灵活,您肯定可以以不同的方式进行配置。 - Kryten
    最后,当他们发布适用于Windows的Docker时,我想IIS将是首批受支持的应用程序之一。 - Kryten

    4

    Docker容器增加了对.NET、SQL Server和其他与IIS集成的工作负载的支持。您还能从Docker的可移植性中受益,因为您可以将容器镜像带到AWS或Azure上运行,也可以在私有环境中运行。此外,您还可以访问一大批基于Docker的工具生态系统......总之,该行业正在向支持Docker API转变。


    2

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