社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

L0j1k

L0j1k 最近创建的主题
L0j1k 最近回复了
8 年前
回复了 L0j1k 创建的主题 » VM的Guesto和Docker的Basic Image有什么区别?

这里的大多数答案都是关于虚拟机的。我将给你们一个简单的回答,这个问题在过去几年使用Docker对我帮助最大。是这样的:

Docker只是一种运行进程的奇特方式,而不是虚拟机。

现在,让我进一步解释一下这意味着什么。虚拟机是它们自己的野兽。我想解释一下 is将帮助您理解这一点,而不仅仅是解释虚拟机是什么。尤其是因为这里有很多很好的答案,告诉你某人说“虚拟机”时的确切意思。所以

Docker容器只是一个使用 cgroups 在主机系统的内核中从其他进程中分离出来。通过运行 ps aux 在主机上。例如,开始 apache2 “容器中”才刚刚开始 apache2 作为主机上的特殊进程。它只是与机器上的其他过程分开。重要的是要注意,容器在容器化流程的生命周期之外不存在。当进程终止时,容器也将终止。那是因为Docker取代了 pid 1 将应用程序放入容器中( 通常是init系统)。最后一点是关于 pid 1 这非常重要。

对于每个容器进程使用的文件系统,Docker使用 UnionFS -备份的图像,这是您在进行备份时下载的图像 docker pull ubuntu .每个“图像”只是一系列层和相关元数据。分层的概念在这里非常重要。每一层只是它下面的一层的变化。例如,当您在构建Docker容器时删除Docker文件中的一个文件时,实际上您只是在最后一层的顶部创建了一个层,上面写着“此文件已被删除”。顺便说一句,这就是为什么可以从文件系统中删除一个大文件,但映像仍然占用相同的磁盘空间。文件仍然在那里,在当前文件下面的层中。层本身只是文件的tarball。你可以用 docker save --output /tmp/ubuntu.tar ubuntu 然后 cd /tmp && tar xvf ubuntu.tar .然后你可以四处看看。所有那些看起来像长散列的目录实际上都是单独的层。每一个都包含文件( layer.tar )和元数据( json )关于那个特定层的信息。这些层只描述对文件系统的更改,这些更改被保存为“在”其原始状态之上的层。当读取“当前”数据时,文件系统读取数据时,就好像它只查看最顶层的更改一样。这就是为什么文件似乎被删除了,尽管它仍然存在于“之前”的层中,因为文件系统只查看最顶层。这允许完全不同的容器共享它们的文件系统层,即使每个容器最顶层的文件系统可能发生了一些重大变化。当容器共享其基本图像层时,这可以节省大量磁盘空间。但是,当您通过卷将目录和文件从主机系统装载到容器中时,这些卷会“绕过”UnionFS,因此更改不会存储在层中。

Docker中的网络是通过使用以太网桥(称为 docker0 主机上),以及主机上每个容器的虚拟接口。它会在中创建一个虚拟子网 docker0 让你的容器相互“交流”。这里有很多联网选项,包括为容器创建自定义子网,以及“共享”主机的联网堆栈以供容器直接访问的功能。

Docker进展得很快。它的 documentation 是我见过的最好的文档之一。它通常写得很好、简洁、准确。我建议您查看可用的文档以了解更多信息,并相信这些文档胜过您在网上阅读的任何其他内容,包括堆栈溢出。如果你有具体问题,我强烈建议你加入 #docker 在Freenode IRC上并在那里询问(你甚至可以使用Freenode的 webchat 为了这个!)。