首页 > 解决方案 > 仍然对docker感到困惑

问题描述

我已经使用基本映像为 Windows Server 2016 构建了一个应用程序并构建了一个 dockermicrosoft/aspnetcore:2.0映像。我的问题是……我可以在哪些机器/操作系统上运行容器?我知道它不能在 Linux 上运行.....但是它可以在(例如)任何版本的 windows server 2016 上运行吗?windows server 2019 怎么样?
架构是 AMD64 ......这是否意味着容器只能在具有该确切架构的机器上运行?

我试图弄清楚为什么容器被认为是有益的

标签: docker

解决方案


我对 Docker Windows 容器没有任何经验,但总体上我对 Docker 容器有丰富的经验,而且 Windows 和 Linux 容器之间的概念应该基本相同。

运行构建的应用程序时,无论是在 Windows Server 2016、Windows Server 2019 还是 Windows 10 Pro 上运行,应用程序的功能都应该完全相同。在幕后,Docker 提供了一个隔离的应用程序环境。从您的应用程序的角度来看,它只知道/体验/看到自己和它正在运行的 Windows 内核。如果你有一个 IIS 实例也在该服务器上运行,你的应用程序将不知道。这里的重点是 Docker 提供了一种方法:

  1. 在同一台机器上运行多个版本的应用程序,完全隔离。
  2. 为每个应用程序提供更干净的运行环境。
  3. 比运行离散的虚拟机更节省资源

Docker 的另一个巨大好处是它为临时环境提供了一种方法。这意味着您应该期望在机器#1 上运行的应用程序与在机器#2 上运行的应用程序具有完全相同的行为。它消除了“在我的机器上工作”的心态,尤其是在未安装/忘记某些其他 3rd 方依赖项时,因为这些将作为构建的一部分捆绑到容器中。

最后,关于建筑。您构建的应用程序旨在针对构建它的 Windows 内核的体系结构运行。根据我的理解,在您的情况下,AMD64 意味着 x86_64 架构。这应该意味着您的容器将在任何 64 位 x86 机器(AMD 或 Intel)上运行。您的容器不会在任何其他架构上运行:x86(32 位)、386、486、ARM、ARM 64 等。我认为在 Windows 的情况下这不是一个重要的问题,因为 90% 的时间你在 x86_64 上运行。但是对于 Linux,您最终会得到从 SPARC 到 ARM 的所有内容,因此架构上的区别很重要。

当我开始使用 docker 时,我也有很多相同的问题。虽然产品“Docker”有时会受到影响,但“容器”的概念及其在正确使用时提供的好处非常强大,我几乎在我从事的每个项目中都使用它。


推荐阅读