Kubernetes 与 Docker 对比

Kubernetes 与 Docker 概述

理解 Kubernetes 与 Docker 的区别,是云原生和 DevOps 中的一个重要主题。虽然现实中一谈到 Kubernetes 就必然会提起 Docker,但事实上这两者不能相互比较。Kubernetes 和 Docker 并不构成直接竞争关系。相反,它们是能够相互协作、相互补充的两种技术。


对于 Kubernetes 和 Docker,您将遇到哪些场景呢?对此,您首先要了解这两者有哪些不同,在哪些方面存在重叠。

了解 Docker

Docker 是一个面向应用容器的开源平台。其中,容器是一个独立封装格式,能够将所有必需代码和依赖关系封装到一个可执行格式中。您可以将它看作一个包含一张桌子的所有部件、支架和螺丝(当然还有六角扳手)的 IKEA 包裹,区别在于容器可以在您执行的时候为您“搭好桌子”。

得益于轻量和标准化格式这两个优点,Docker 深受开发人员的喜爱。它让开发人员能够灵活、可扩展地构建、测试和部署应用。

Docker 在 IT 行业中还有另一重含义,即 Docker, Inc,这是一家为 Docker 平台开发工具的公司。在使用中,请注意区分 Docker 的含义。

了解 Kubernetes

如果说 Docker 是一个容器,那么 Kubernetes 就是一个可同时管理多个容器的工具。和 Docker 平台(不是 Docker 公司)一样,Kubernetes 也是一个开源平台,它是云原生计算基金会管理的一个项目,拥有超过 2300 名贡献者。Kubernetes 面向云技术的运行方式与操作系统类似,它能够理顺和简化跨虚拟机和跨云环境管理,助力 IT 部门规模化地完成任务。

Kubernetes 可以做什么?Kubernetes 的运行方式与本地系统上的所有系统管理类似,区别只在于它面向的是容器。它可以执行容器供应、更新、调度、删除以及运行状况监视工作。如果说容器是一个 IKEA 包裹,那么 Kubernetes 就是 IKEA 仓库中负责下单、配送以及检查桌子、椅子和其他包装家具状态的设施经理。

其他容器运行时

所有关于 Docker 和 Kubernetes 的讨论都很容易遗漏一点,那就是什么是容器运行时。什么是容器运行时呢?简单来说,它是一个用于运行容器的引擎,就像 IKEA 包裹中的装配说明书一样。在某些情况下,低级容器运行时就能处理执行管理工作。在某些复杂场景中,高级容器运行时可以提供 API 集成、镜像格式和镜像管理指导。某些时候,容器运行时和 Docker 可以互换使用,尽管二者之间存在细微差别。

Kubernetes 运行一个 API,即容器运行时接口 (CRI)。CRI 接口可以连接每个容器运行时,以此来执行包。对于 IKEA 包裹(容器),Kubernetes 的 CRI 就相当于负责读取装配说明书(容器运行时)的那个人。

除了 Docker,如今市场上还有其他容器运行时。以下是 Docker 以外广为流行的两个容器运行时:

Containerd: Containerd 起初是 Docker 项目的一部分。但是,它的目标是让 Docker 更灵活、更模块化,这促使开发人员将其分离为一个单独项目。Containerd 可发挥高级容器运行时作用,例如从注册表拉取镜像、镜像管理,以及与低级运行时集成,从而执行容器流程。

CRI-O:CRI-O 同样是一个可代替 Docker 的开源容器运行时。它可以实施 Kubernetes 容器运行时接口 (CRI),启用与开放容器计划标准兼容的运行时。

CRI-O 和 Containerd 都遵守 CRI 的规范,与 Kubernetes 完全兼容。

Docker 和 Kubernetes 有何区别?

人们经常讨论 Docker 与 Kubernetes 有什么区别,但事实上这二者并不构成直接竞争关系。本文通过 IKEA 的示例介绍了它们的关系以及为何它们对于现代 IT 管理至关重要。无论从哪一个方面来讲,它们都不是竞争对手。相反,它们都是云原生生态系统的一部分:Docker 由 Kubernetes 管理,Kubernetes 能够轻松扩展 Docker 容器的规模

因此,IT 主管的问题不是该选择 Docker 还是 Kubernetes,而是如何协同使用 Kubernetes 和 Docker 来满足运营和管理需求。

Docker 和 Kubernetes 如何协同工作?

Kubernetes 和 Docker 可协同工作。如果只需要管理一个 Docker 部署,Kubernetes 不是必需的。但如果要管理多个 Docker 部署实例,Kubernetes 可发挥切实有效的协同效应,尤其是在需要通过扩展,使用同一应用的多个部署时。作为一种开源工具,Kubernetes 编排系统可确保您持续获得支持,高效解决跨多个服务器的复杂性问题。

使用 Kubernetes,您可以通过补丁和更新的批量处理以及规模化问题监视等特性,轻松部署和管理多个 Docker 包,同时高效处理用户的个性化请求。使用 Kubernetes,IT 部门可以:

  • 在基础设施上部署 Docker 容器
  • 按需扩展 Docker 容器并扩展或缩减资源
  • 按需供应、调度或删除容器,执行容器更新
  • 监视 Docker 容器实例运行状况

适用于 Kubernetes 和 Docker 的 Oracle 工具

Oracle Cloud Infrastructure 提供一系列服务来帮助企业和用户提高速度,构建现代云原生应用。例如,可靠、免费(随附)的 Container Engine for KubernetesContainer Registry 可管理和分析 Docker 镜像,理顺管理工作,提高性能。您可以免费试用 Oracle Cloud,访问 Kubernetes 以了解更多信息。

Oracle Container Engine for Kubernetes 客户成功案例

庞贝考古公园
庞贝考古公园:

2020 年 3 月意大利庞贝考古公园闭园后,所有的重新开放计划都需要通过一定的管理和控制措施来维持安全距离。最终,庞贝考古公园选择使用 Oracle Container Engine for Kubernetes 和 Oracle Container Registry 等产品来加速构建云原生移动解决方案,开发了一个全新的面向游客的 MyPompeii 应用。

Snap Vision:

位于伦敦的 Snap Vision 提供人工智能驱动的视觉搜索技术来帮助消费者查找他们喜欢的衣服。在新冠疫情的影响下,门店购物长期基本关停,为此 Snap Vision 提供先进技术来帮助英国零售商构建数字化购物体验。在这一过程中,面对扩展这一艰巨挑战,Snap Vision 使用 Oracle Cloud Infrastructure 和 Kubernetes,以低廉成本托管零售商环境。

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国 。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。