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 如此狂热?
- 更快的入职
这一点很容易理解。
让我们回到你和 Randall 的例子。
我们已经知道你们有一台 Linux 机器,并且你们已经用 Node 搭建了网站。所以 Randall 需要安装并启动 Node。你们网站上还有一个表单,表单背后是一个数据库。所以 Randall 需要安装并熟悉你们之前使用过的 MongoDB。Randall 还需要下载、安装并熟悉网站协调器和消息系统。
有很多事情要做,而你甚至还没有和兰德尔开始讨论你对这项工作的愿景……
让我们将这个场景带到您使用 Docker 的世界中。
以下是同样的场景:
Randall 需要安装并熟悉 Docker。
就是这样。
你可以继续阐述你对网站的愿景了。
- 便携
这听起来可能很奇怪,因为感觉互联网上的一切都是可移植的 - 也就是说,您几乎可以在任何机器上访问东西......
你知道那个开发人员对测试人员说“嗯,它在我的机器上能用!”的笑话吗?
如果他们没用docker,那这话可能是真的!我们已经从Randall那里了解到,你网站上的某些东西需要不同的操作系统,并且有不同的依赖项(高于内核级别)才能运行……所以,如果一个开发人员构建了一个漂亮的东西,但没有通过docker构建,那么他们就得依赖每个收到它的人都拥有必要的资源才能运行它!
Docker只是把所有代码都打包到操作系统的盒子或容器里,然后在任何地方运行它们!这也意味着代码可以在任何地方用Docker构建,从而实现团队之间更流畅的协作。
不过,你必须小心——如果你和Randall构建的东西引用了外部的东西,Docker将无法将其放入容器中——所以它可能无法在没有外部东西的另一台机器上按预期工作。
- 很快....
因此,从技术角度来说,Docker并不比虚拟机更快,但由于 Docker 共享主机内核,因此性能更好 - 它效率更高,因此您的计算机运行更流畅 - 我想这给人的印象是它更快。
说它更快并没有错——从技术上来说确实如此——但如果你想就此与人争吵,那就留给你去决定吧!好吧,它确实更快,但更快是因为性能更好,而不是因为它本身就更快。在容器内部(你的网站及其内容在其中顺利运行),它的性能与虚拟机差不多,但在你的机器上运行虚拟机本身会非常耗性能。
总而言之 - Docker 本质上是一个快速卷饼,充满了代码
。🌯
感谢:
许多 YouTube 视频,特别是
Network Chuck - https://www.youtube.com/watch?v=eGz9DS-aIeY
Twitter 上的许多人,特别是:
@mesetatron - 感谢您令人难以置信的主题知识和清晰的观点
☕️咖啡 - 我饮食中的主要食物
🍵茶 - 很多杯茶
🍦冰淇淋 - 消耗了 1 桶冰淇淋!