草庐IT

windows - 容器(Docker)和 IIS 之间的区别

coder 2023-05-06 原文

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

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

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

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

最佳答案

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 应用程序)。想象一下为这个应用程序运行六个不同的服务器。

关于windows - 容器(Docker)和 IIS 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30357679/

有关windows - 容器(Docker)和 IIS 之间的区别的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  4. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  5. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  6. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  7. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  8. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

随机推荐