docker - 仍然对docker感到困惑
问题描述
我已经使用基本映像为 Windows Server 2016 构建了一个应用程序并构建了一个 dockermicrosoft/aspnetcore:2.0
映像。我的问题是……我可以在哪些机器/操作系统上运行容器?我知道它不能在 Linux 上运行.....但是它可以在(例如)任何版本的 windows server 2016 上运行吗?windows server 2019 怎么样?
架构是 AMD64 ......这是否意味着容器只能在具有该确切架构的机器上运行?
我试图弄清楚为什么容器被认为是有益的
解决方案
我对 Docker Windows 容器没有任何经验,但总体上我对 Docker 容器有丰富的经验,而且 Windows 和 Linux 容器之间的概念应该基本相同。
运行构建的应用程序时,无论是在 Windows Server 2016、Windows Server 2019 还是 Windows 10 Pro 上运行,应用程序的功能都应该完全相同。在幕后,Docker 提供了一个隔离的应用程序环境。从您的应用程序的角度来看,它只知道/体验/看到自己和它正在运行的 Windows 内核。如果你有一个 IIS 实例也在该服务器上运行,你的应用程序将不知道。这里的重点是 Docker 提供了一种方法:
- 在同一台机器上运行多个版本的应用程序,完全隔离。
- 为每个应用程序提供更干净的运行环境。
- 比运行离散的虚拟机更节省资源
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”有时会受到影响,但“容器”的概念及其在正确使用时提供的好处非常强大,我几乎在我从事的每个项目中都使用它。
推荐阅读
- javascript - 检测元素何时到达视口顶部
- haskell - 为什么 makeLenses 不为一些量化的构造函数派生出一个镜头?
- c - 尝试运行二进制文件时旧 ld 中的 SEGFPE 错误
- python - 我有 'NoneType' 对象在 django 中没有属性 'groups'
- pandas - TypeError:熊猫中的“str”和“int”实例之间不支持“>”
- terraform - 在内联脚本中跳过地形插值
- javascript - 反应 i18next hasLoadedNamespace:i18next 未初始化未定义
- scala - 具有 reify 错误的创建树:宏扩展包含自由项变量 c
- r - R未能保留一些特殊字符
- python - 有人可以解释为什么 python 相对导入不直观吗?