我正在学习有关容器(主要是 Docker)的知识,因为它已经在 Windows 上使用。这些好处似乎与 IIS 很相似。
我在公司内部开发应用程序(业务线),在防火墙后面工作。我们有一堆 VM,每个 VM 都将托管一组 Web 服务。一个 VM 可以在 IIS 上运行 20 多个服务。
在这种情况下,使用 Docker 部署我的服务会带给我什么不同于使用 IIS 的好处呢?
注意:我对 Docker 完全没有了解,只有在 IIS 开发方面的经验。
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上运行)。想象一下为这个应用程序运行六个不同的服务器。
Docker容器增加了对.NET、SQL Server和其他与IIS集成的工作负载的支持。您还能从Docker的可移植性中受益,因为您可以将容器镜像带到AWS或Azure上运行,也可以在私有环境中运行。此外,您还可以访问一大批基于Docker的工具生态系统......总之,该行业正在向支持Docker API转变。
https://hub.docker.com/r/microsoft/iis/