我发现虚拟机和容器之间的巨大区别。但这使我对Ubuntu容器如何存在感到困惑。由于Ubuntu是一个操作系统,这对我来说很矛盾。
https://hub.docker.com/_/ubuntu
这不是整个来宾操作系统吗?那么,什么使它成为VM上的容器呢?还是容器和VM之间的界线模糊了?
我尝试使用谷歌搜索,但是我发现的唯一结果是经典的VM vs容器答案,这并不是我要问的,我不认为。
编辑-我已更新,可以尝试进一步阐明我的问题。
答案 0 :(得分:2)
Docker是在隔离的轻量级容器中运行应用程序的新方法。即使它们是隔离的,它们也可以与其他组件集成。
效率不是唯一的收获。打包应用程序使其在Docker中运行时,您将获得可移植性。您可以在笔记本电脑上的Docker容器中运行应用程序,并且该应用程序在数据中心的服务器和任何云中的虚拟机(VM)上的行为都将完全相同。
另一个主要动机是安全。容器在应用程序之间增加了安全隔离,因此您可以放心,如果一个应用程序遭到破坏,攻击者将无法继续入侵同一主机上的其他应用程序。
当您将应用程序打包为Docker映像时,它们都具有相同的形状-您可以以相同的方式部署,管理,保护和升级它们。
回答您的问题:
每个docker容器都运行自己的轻量级VM,因此常规VM之间的界线变得模糊,除了docker容器并不像常规VM一样用于GUI应用程序这一事实。
您认为错了。您需要在Dockerfile中包含一个操作系统,然后再添加应用程序代码。但是,根据您的应用程序,如果您只有要运行的简单控制台应用程序,则Docker Hub上会存在不同大小的OS映像,例如Windows nanoserver。这样,您就不需要具有完整操作系统的VM。您可以做的另一件事是在dockerfile中运行分阶段生成,该编译将编译您的应用程序,并且仅在映像中包含运行时环境,从而有效地减小了其大小。
Docker主要用于对新旧应用程序进行dockerr化,这意味着将它们拆分为逻辑上分离的容器。将应用程序进行dockerr化后,它会获得诸如安全性,依赖关系分离,零停机维护,连续集成管道,可移植性,效率等优势。您无法使用常规VM来对应用程序进行容器化。 Docker容器和常规VM的用途和构建方式不同。
如果您正在使用Windows容器来更好地了解Docker的用途,那么我可以推荐以下书籍: https://www.packtpub.com/virtualization-and-cloud/docker-windows
如果没有,packt将为Linux上的docker提供其他书籍。
我希望这能回答您的问题:)