Docker 是什么?🤷🏼‍♀️

2025-05-25

Docker 是什么?🤷🏼‍♀️

术语:
OS:操作系统
VM:虚拟机
服务器:一块巨大的金属,带有一些复杂的部件
编排器:在网站上运行并管理所有操作的程序
消息系统:不是 MSN……在网站中,消息服务本质上是在网站的不同组件和部分之间来回运行,并将消息从一个东西传递到另一个东西。
主机操作系统:您机器的基础操作系统
客户操作系统:由虚拟机创建

我要在这里设定一个场景,我们以后会反复回顾。
你为了一个很棒的创意搭建了一个网站。它有一个用户可以提交的表单,还有许多其他炫酷的功能。你对此非常满意,并想进一步完善这个想法。你需要开发人员 Randall 的帮助。Randall 很酷,他喜欢墨西哥卷饼🌯
为了搭建你的网站,你需要运行 3 个不同的操作系统,因为你的基本应用和功能都在不同的操作系统上运行。

基本应用程序 A:Linux 版本 6.6
基本应用程序 B:Windows
基本应用程序 C:Linux 版本 5.1

在深入探讨 Docker之前,我认为有必要先了解一些历史背景。
在 Docker 和容器出现之前,数据存储和访问都是在服务器上进行的,而这些服务器通常被存放在被称为数据中心的巨型“冰箱”里。每台服务器都运行一个操作系统,而且价格非常昂贵。

一个放置服务器的柜子。电线已插好
回到你和兰德尔的话题。除了支付兰德尔的优秀技术报酬外,你还要为三台服务器支付高价!这可是三块大金属,还要分三次付款才能把它们存放在数据中心!加起来可不是小数目……

这就是发明虚拟机管理程序的原因。

超级...什么?

虚拟机管理程序本质上是用来分割服务器上的内存和存储的。这意味着你可以在一台服务器上运行多个操作系统。哇哦!太激动人心了。
让我解释一下:

想象一下,您的服务器变成了一个大的矩形披萨。

跟我在一起,别再想着披萨了……
桌上的圆形披萨,切成小块

有三个非常挑剔的人来家里吃饭。你得让他们都吃饱。他们吃的东西都不一样,而且不喜欢其他东西。你也需要吃饭——所以你该怎么办?做四个不同的披萨肯定很贵……
你要做一个巨大的披萨,但每个角落都有四种不同的口味。你决定要放什么配料,以及配料的数量,然后放进烤箱烤。

现在我再说一遍这个比喻,但用一些不同的词语

您的网站上运行着三个重要的应用程序。它们都需要一个操作系统。它们都运行在不同的操作系统上,无法在其他任何操作系统上运行。还记得您的三台服务器吗?运行和维护它们的成本非常高昂。您的网站还运行着一个叫做 Node.js 的程序。它更加灵活,可以在大多数操作系统上运行。
您将拥有一台服务器,但上面运行着四个不同的操作系统。您还可以决定 CPU、RAM 等各种资源的分配。

这基本上就是虚拟机管理程序所做的事情 - 您可以分割您的资源(您的服务器)来运行多个操作系统,并根据需要分配尽可能多的内存和电源(仅限于您的服务器的容量)。 - 这样,您可以在一台服务器上运行所有应用程序(满足所有挑剔的客人的需求),而不是拥有多台服务器!

虚拟机管理程序也位于虚拟机之下,为虚拟机提供基础。您可能之前听说过虚拟机。假设您和 Randall 在 Linux 机器上运行网站,但您确实需要一个只能在Windows 上运行的应用程序。哦,没关系,因为有虚拟机!您可以Linux 机器中启动 Windows 机器……这有点令人困惑。但这就是虚拟机管理程序和其他虚拟机的作用。
最流行的虚拟机管理程序类型是 VMware,特别是 ESXi。

很好,但是这能解释 Docker 吗?

不,
Docker 实际上更像是一个带有虚拟机管理程序的单一服务器……

最大的区别在于虚拟机会虚拟化硬件——这会让操作系统相信它确实拥有正确的硬件(内核)来执行其需要的操作。本质上,虚拟机是在“欺骗”操作系统。
而 Docker 则会了解您想要运行的内容,然后为其内部的程序(所有程序都运行在不同版本上,简直是一场噩梦)提供接口。它会将这些程序放入小型虚拟盒子或容器中。它与虚拟机的操作方式类似,但它拥有自己的小盒子,而不是硬件虚拟化,而是创建了一个“客户操作系统”(欺骗主机操作系统认为它有能力运行)。由于 Docker 使用的是基础操作系统内核,而不是像虚拟机那样在其上创建其他程序,因此 Docker 的性能会更好。

核心…?

内核是位于计算机操作系统核心的计算机程序,它完全控制系统中的所有内容。每个操作系统都有一个内核。您的 Windows 计算机有一个 Windows 内核,您的 Ubuntu 系统有一个 Linux 内核,等等。

您可以在本文中阅读有关内核的更多信息

那么 Docker 为何如此受欢迎?

为什么现在业界对 Docker 如此狂热?

  1. 更快的入职

这一点很容易理解。
让我们回到你和 Randall 的例子。
我们已经知道你们有一台 Linux 机器,并且你们已经用 Node 搭建了网站。所以 Randall 需要安装并启动 Node。你们网站上还有一个表单,表单背后是一个数据库。所以 Randall 需要安装并熟悉你们之前使用过的 MongoDB。Randall 还需要下载、安装并熟悉网站协调器消息系统。

有很多事情要做,而你甚至还没有和兰德尔开始讨论你对这项工作的愿景……


让我们将这个场景带到您使用 Docker 的世界中。

以下是同样的场景:

Randall 需要安装并熟悉 Docker。

就是这样。
你可以继续阐述你对网站的愿景了。

孩子们指着笔记本电脑屏幕庆祝

  1. 便携

这听起来可能很奇怪,因为感觉互联网上的一切都是可移植的 - 也就是说,您几乎可以在任何机器上访问东西......

你知道那个开发人员对测试人员说“嗯,它在我的机器上能用!”的笑话吗?
如果他们没用docker,那这话可能是真的!我们已经从Randall那里了解到,你网站上的某些东西需要不同的操作系统,并且有不同的依赖项(高于内核级别)才能运行……所以,如果一个开发人员构建了一个漂亮的东西,但没有通过docker构建,那么他们就得依赖每个收到它的人都拥有必要的资源才能运行它!
Docker只是把所有代码都打包到操作系统的盒子或容器里,然后在任何地方运行它们!这也意味着代码可以在任何地方用Docker构建,从而实现团队之间更流畅的协作。
不过,你必须小心——如果你和Randall构建的东西引用了外部的东西,Docker将无法将其放入容器中——所以它可能无法在没有外部东西的另一台机器上按预期工作。

  1. 很快....

因此,从技术角度来说,Docker并不比虚拟机更快,但由于 Docker 共享主机内核,因此性能更好 - 它效率更高,因此您的计算机运行更流畅 - 我想这给人的印象是它更快。

说它更快并没有错——从技术上来说确实如此——但如果你想就此与人争吵,那就留给你去决定吧!好吧,它确实更快,但更快是因为性能更好,而不是因为它本身就更快。在容器内部(你的网站及其内容在其中顺利运行),它的性能与虚拟机差不多,但在你的机器上运行虚拟机本身会非常耗性能。

总而言之 - Docker 本质上是一个快速卷饼,充满了代码
。🌯
方形白盘上放两份墨西哥卷饼

感谢:

许多 YouTube 视频,特别是
Network Chuck - https://www.youtube.com/watch?v=eGz9DS-aIeY
Twitter 上的许多人,特别是:
@mesetatron - 感谢您令人难以置信的主题知识和清晰的观点
☕️咖啡 - 我饮食中的主要食物
🍵茶 - 很多杯茶
🍦冰淇淋 - 消耗了 1 桶冰淇淋!

文章来源:https://dev.to/javascriptcoff1/what-is-docker-3be2
PREV
使用 Yarn 将 React 应用部署为 Github 用户页面
NEXT
面向 Web 开发人员的十大 VsCode 扩展 Surround