Docker Compose和Kubernetes之间的区别是什么?

在深入研究Docker、谷歌Cloud和Kubernetes时,我还没有清楚地了解它们三个,在我看来,这些产品是重叠的,但它们并不兼容。

例如,docker-compose.yml文件需要重写,以便应用程序可以部署到Kubernetes。

谁能提供一个高层次的、粗略的描述,说明Docker、Docker Compose、Docker Cloud和Kubernetes在哪里重叠,在哪里相互依赖?

126611 次浏览

容器:

  • 容器是这里列出的其他技术的核心

Docker:

  • Docker是一种流行的技术实现,它允许将应用程序捆绑到容器中。
  • docker是一个命令行工具,用于管理映像、容器、卷和网络

Docker Compose

  • Docker Compose是Docker cli的声明式版本
  • 它可以启动一个或多个容器
  • 它可以创建一个或多个网络并将容器附加到这些网络上
  • 它可以创建一个或多个卷,并配置容器来挂载它们
  • 所有这些都在< >强单< / >强主机上使用

Docker Classic Swarm

  • Docker swarm已经被Docker Inc.抛弃,并且没有得到积极的维护或支持。
  • Docker Swarm用于运行和连接多个主机上的容器。
  • Docker Swarm是一个容器集群管理和编排工具。
  • 它管理运行在多台主机上的容器,并做一些事情,比如伸缩,当一个容器崩溃时启动一个新容器,连接容器……
  • 名为stack file的Docker Swarm文件与Docker Compose文件非常相似
  • Kubernetes和Compose之间唯一的比较是在最琐碎和不重要的层面上:它们都运行容器,但这并不能帮助人们理解这两个工具是什么以及它们在哪里有用。它们都有不同的用途

< a href = " https://kubernetes。io / noreferrer“rel = > Kubernetes < / >

  • Kubernetes (K8S)是最初由谷歌创建的分布式容器编制工具
  • 它于2014年开源,并于次年移交给云原生计算基金会(CNCF)
  • CNCF是一个由大型云计算、软件和硬件公司组成的行业组织
  • 在撰写本文时(2021年底),有近千个K8S相关项目分为大约20个类别,总资金超过210亿美元
  • Kubernetes(2021)是世界上最流行的分布式系统编配器,使用采用88%
  • 由于其几乎无处不在,K8S已成为2021年最受欢迎的创新系统开发当代平台
  • Kubernetes是Docker swarm的竞争对手(或多或少),但比Docker swarm做得更多,这是一个受欢迎的选择。

首先是容器引擎和容器编排器之间的区别。

docker是一个容器引擎,它让你构建和运行通常最多不超过一个容器,在你的PC本地用于开发目的。

docker-compose是一个Docker实用程序,可以运行多个容器,让它们通过Docker引擎特性共享卷和网络,本地运行以模拟服务组合,远程运行在集群上。

Kubernetes是一个容器编排平台,它负责运行容器并增强引擎功能,以便容器可以组合和扩展以服务于复杂的应用程序(类似于PaaS,由您或云提供商管理)。Kubernetes的主要功能是将基础设施与使用容器的应用程序分离开来,它也对Docker的其他引擎开放,例如它可以使用rkt或cro运行容器。

Docker云也是一个PaaS服务,它可以让你通过docker引擎API运行和编排容器。

现在,根据您的需求,对基础设施和目标受众的控制水平,您可以在baremetal上使用Kubernetes,或Azure ACS或谷歌GKE等…

希望这对你有所帮助:) 关于< / p >

除了@yamenk的的答案,我想在这里添加一些细节,这可能有助于人们理解Kubernetes。

简短的回答:

  • docker-compose:是一个工具,它接受一个描述你的multi-container应用程序的YAML文件,并帮助你创建启动/停止删除所有这些容器,而不必为每个容器键入多个docker ...命令。
  • Kubernetes:是一个用于管理容器化的工作负载和服务的平台,这有利于声明性配置和自动化。什么?🤔继续阅读…

码头工人组成

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令就可以从配置中创建并启动所有服务。 Compose有管理应用程序整个生命周期的命令:

  • 启动、停止和重新构建服务
  • 查看正在运行的业务状态
  • 流化正在运行的业务的日志输出
  • 对服务执行一次性命令

Kubernetes

(from Kubernetes简介): Kubernetes是一个类似Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad的容器编排器。容器编排器是将主机组合在一起形成集群的工具,并帮助我们确保应用程序:

  • 容错,
  • 是否可以扩展,并按需进行
  • 优化使用资源
  • 能否自动发现其他应用程序,并相互通信
  • 是否可以从外部世界访问
  • 可以更新/回滚,没有任何停机时间。

许多人认为Kubernetes很难学。这是因为它解决了一系列问题,人们试图在不知道所有先决条件的情况下理解它。这让事情变得复杂。通过阅读下面的概念/术语,开始把拼图的碎片拼在一起。这个过程将帮助你理解Kubernetes试图解决的问题:

  • 12-factor应用,
  • 自动binpacking,
  • 自我修复机制,
  • 水平扩展,
  • 服务发现和负载均衡,
  • 自动推出和回滚,
  • 蓝绿部署/金丝雀部署
  • 秘密和配置管理,
  • 存储编排

因为容器及其管理有很多不同的东西,所以请密切关注云原生环境:

交互式版本:landscape.cncf.io /

enter image description here

更新

2020年5月:Docker撰写规范现在是一个开放标准

与AWS、微软和开源社区的其他公司合作,除了现有的Compose平台,我们还扩展了Compose规范,以支持Kubernetes和Amazon ECS等原生云平台。更多信息:博客 / compose-spec.io

如果你是在同一主机内的网络容器,请使用码头工人组成

如果你是跨多个主机连接容器,请使用kubernetes

码头工人组成不是一个生产就绪的工具。它非常适合PoC或开发环境,但缺少大量用于严肃生产使用的功能。Swarm更适合生产,但我绝不会在未开发的场景中投资Swarm。Kubernetes已经赢得了编排之战,它被纳入Docker Desktop,并被所有主要的云提供商提供。Kubernetes能力更强,有更多的社区和企业支持。

我建议你深入研究一些在Pluralsight、Linux Academy等网站上提供的Kubernetes教程,并在你选择的云平台(EKS、AKS、GKE等)上旋转一个集群。如果您试图在裸机上旋转,可以看看OpenShift,但要认识到在这种设置中您失去了Kubernetes的一些魔力。