为什么 Ubuntu docker 镜像不是虚拟机

Win*_*nke 12 virtualization containers virtual-machine docker dockerhub

我得到了 VM 和容器之间的巨大差异。但这让我对 Ubuntu 容器如何存在感到困惑。因为 Ubuntu 是一个操作系统,所以我觉得很矛盾。

https://hub.docker.com/_/ubuntu

这不是一个完整的客户操作系统吗?那么是什么使它成为虚拟机上的容器呢?或者容器和虚拟机之间的界限是否模糊?

我试过在谷歌上搜索这个,但我发现的唯一结果是经典的 VM vs 容器答案,这并不是我真正想问的,我不认为。

编辑 - 我已经更新以尝试进一步澄清我的问题。

小智 5

Docker 是一种在隔离的轻量级容器中运行应用程序的新方式。即使它们是隔离的,它们也可以与其他组件集成。

效率并不是唯一的收获。当您打包应用程序以在 Docker 中运行时,您将获得可移植性。您可以在笔记本电脑上的 Docker 容器中运行您的应用程序,它在数据中心的服务器和任何云中的虚拟机 (VM) 上的行为方式完全相同。

另一个重要的动力是安全性。容器在应用程序之间增加了安全隔离,因此您可以确信,如果一个应用程序受到威胁,攻击者就无法继续攻击同一主机上的其他应用程序。

当您将应用程序打包为 Docker 映像时,它们都具有相同的形状——您可以以相同的方式部署、管理、保护和升级它们。

回答你的问题:

  • 每个 docker 容器都运行自己的轻量级 VM,因此常规 VM 之间的界限是模糊的,除了 docker 容器不像常规 VM 那样用于 GUI 应用程序。

  • 你假设错了。您需要在 Dockerfile 中包含一个操作系统,然后是应用程序代码。但是,根据您的应用程序,如果您只想运行一个简单的控制台应用程序,Docker Hub 上会存在不同大小的操作系统映像,例如 windows nanoserver。那么您就不需要具有完整操作系统的虚拟机。您可以做的另一件事是在您的 dockerfile 中运行分阶段构建,这将编译您的应用程序并且只在您的映像中包含运行时环境,从而有效地减小其大小。

  • Docker 主要用于 dockerrize 新旧应用程序,这意味着将它们拆分到逻辑分离的容器中。当应用程序被 dockerrized 时,它会获得安全性、依赖项分离、零停机维护、持续集成管道、可移植性、效率等好处。您不能使用常规 VM 容器化应用程序。docker 容器和常规 VM 的目的和构建是不同的。

如果您正在使用 Windows 容器来更好地了解 docker 的用途,我可以推荐以下书:https : //www.packtpub.com/virtualization-and-cloud/docker-windows

如果没有,那么 packt 会为 Linux 上的 docker 提供其他书籍。

我希望这回答了你的问题 :)

  • (Linux) 容器并不包含自己的内核。这是一个极其显着的差异。 (3认同)