Docker 为非技术人员提供直观的解释
Docker 已经推出一段时间了,并且得到了广泛的应用。我认为,对于专业软件工程师来说,了解如何使用 Docker 正逐渐成为一项必备技能,就像版本控制(例如git )一样。
然而,许多非技术人员并不了解 Docker。
这并不奇怪,因为它很复杂,你必须了解多个层面的东西才能真正了解 Docker 到底为人们做了什么。
尽管如此,Docker 是一项热门技术,我们必须谈论它!
注意:本文最初是为招聘人员撰写的,但我尝试将其分解,以便任何从事技术工作(但没有工程背景)的人都可以理解。
操作系统和虚拟机
你可能知道什么是操作系统 (OS),并且能说出几个。Windows、Mac OSX、Linux。这些都是操作系统。它们被设计为安装在物理硬件(你的物理计算机)上并在其中运行程序的基础层软件。操作系统负责将你的程序连接到你的输入设备(例如鼠标和键盘)以及输出设备(例如显示器)。
很基础的东西吧?虚拟机(VM)的概念是虚拟地运行一个操作系统。你实际上可以安装程序,让你安装另一个操作系统并在主机操作系统中运行它。
所以它看起来像这样:
- 物理硬件:Apple MacBook
- 主机操作系统:Mac OSX
- 虚拟化程序:Virtual Box
- 虚拟操作系统:Ubuntu Linux
我制作了下面的图表来解释这样做的例子:
这实际上就像在你的电脑上运行着另一台电脑。你可以通过一个窗口进入其中并与之交互。
那么,Docker 是什么?
你可以把 Docker 想象成运行虚拟机的软件。具体来说,它运行的Docker 容器,是由Docker 镜像衍生而来的。
需要明确的是,Docker 就像一个虚拟机运行器。但它并非如此,它实际上比运行整个虚拟机效率更高,但我不会在这篇文章中详细讨论这些细节。
Docker 镜像就像虚拟机的模板,可以包含任何你想要的内容。例如,你可以在创建 Docker 镜像时定义以下内容:
- 一个基础操作系统,例如 Alpine Linux
- 您在操作系统上安装的程序(例如,如果您的程序是 Java 应用程序,则为 Java)
- 你的程序代码——也就是你的 Java 代码
然后,当你运行这个镜像时,它就会运行你编写的程序!而且它可以在任何安装了 Docker 的计算机上运行。这一点很重要:即使你在其他计算机上安装了 Docker,你也可以在该计算机上运行任何 Docker 镜像。
等等,这有什么意义呢?
当你将代码“运送”到云端时,你只是试图在某个数据中心的另一台计算机上运行你的代码。所以,当你读到类似这样的话:
Docker 可帮助您在任何地方发送代码并运行应用程序
这就是他们所说的。你正试图在另一台计算机上(可能是在云端)运行你的软件代码,而 Docker 可以帮助你做到这一点。
使用 Docker
正如我所说,构建Docker镜像通常是为了使用应用程序代码进行构建。因此,在创建模板时,您需要编写指令,将应用程序代码复制到镜像中。然后执行所有需要的构建步骤(例如安装库或编译代码)。现在,您就拥有了一个镜像。
现在您已经有了一个镜像,可以在任何安装了 Docker 的地方运行它。例如,在 AWS 等云服务提供商的服务器上运行。您只需在云服务器上安装一次 Docker,然后只需更新 Docker 镜像并运行新版本的 Docker 镜像即可!
下面是制作Docker镜像并运行的示意图:
垂直视角观察正在发生的事情
我制作了一些更精美的图表来展示在两种不同场景下运行容器时发生的情况。这是一个更真实的例子,展示了如何在同一个 Docker 运行时上运行多个容器。
这两个容器(一个 Java 应用程序和一个数据库)就像两台独立的计算机,运行在主机上,就像虚拟机一样。只不过 Docker 比运行整个虚拟机效率更高。Docker 容器通常只运行一个进程,而这正是您想要运行的。因此,您可以这样做,而不会像运行完整的虚拟机那样遇到严重的性能问题。
人们为什么使用 Docker
再次强调,这主要是因为它简化了应用程序的部署。如果你能将开发环境准确地迁移到客户将要使用的生产服务器环境(同样是在云端),这将帮助你大大减少问题。
我会让这个 meme 来总结一下。
除此之外,还有很多基于运行 Docker 容器以及容器化(例如 Kubernetes 或 Docker Swarm)理念构建的工具,所以通常人们会将整个系统层组合在一起。不过我会把这些细节留到另一篇文章里再讲。
结论
人们使用 Docker 的原因有很多:
- 让您更轻松地可靠地构建应用程序
- 使部署更加简单、更加可靠
- 使共享和运行复杂的开发环境变得更容易
- 无需安装即可轻松运行数据库服务器等(传统上您无法安装!)
大多数较新的软件项目都会在其流程的某个地方使用 Docker。无论是在开发环境、生产环境,还是仅在 CI 服务器中,Docker 都可能存在。
因此,理解 Docker 至关重要,因为未来 Docker 将越来越多地成为众多新技术的基础。如果你不理解这个基础,就很难理解构建于其之上的新技术。
这对你有帮助吗?很多人请我写这篇文章!如果这篇文章能帮你理清思路,请告诉我。Docker 真的很难理解,因为你得先理解很多概念,才能明白为什么你需要这样一个工具。
文章来源:https://dev.to/ard/docker-explained-visually-for-the-non-technical-419g