【问题标题】:What's the difference between Docker Compose and Kubernetes?Docker Compose 和 Kubernetes 有什么区别?
【发布时间】:2018-05-12 04:52:21
【问题描述】:

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

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

有人可以提供关于 Docker、Docker Compose、Docker Cloud 和 Kubernetes 重叠的地方以及其中一个依赖于另一个的高级粗略描述吗?

【问题讨论】:

    标签: docker kubernetes docker-compose


    【解决方案1】:

    Containers

    • 容器是此处列出的其他技术的核心

    Docker

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

    Docker Compose

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

    Docker Classic Swarm

    • Docker swarm 已被 Docker Inc. 弃用,没有得到积极维护或支持。
    • Docker Swarm 用于在多个主机上运行和连接容器。
    • Docker Swarm 是一个容器集群管理和编排工具。
    • 它管理在多台主机上运行的容器,并执行诸如扩展、在一个崩溃时启动一个新容器、网络容器等操作...
    • 名为 stack 文件的 Docker Swarm 文件与 Docker Compose 文件非常相似
    • Kubernetes 和 Compose 之间的唯一比较是在最微不足道和最不重要的层面上:它们都运行容器,但这并不能帮助人们理解这两种工具是什么以及它们在哪里有用。它们都对不同的事情有用

    Kubernetes

    • Kubernetes (K8S) 是最初由 Google 创建的分布式容器编排工具
    • 2014 年开源,次年移交给云原生计算基金会 (CNCF)
    • CNCF 是一个行业机构,拥有hundreds of members drawn from the majority 的大型云、软件和硬件公司
    • 在撰写本文时(2021 年末),几乎有一个 thousand K8S related projects 分为大约 20 个班级,总资金超过 210 亿美元
    • Kubernetes (2021) 是世界上最流行的分布式系统编排器88% adoption
    • 由于其近乎无处不在,K8S 已成为 2021 年最流行的当代创新系统开发平台

    【讨论】:

    • 好的对不起。我想我还是很困惑。那么这是否意味着 docker-compose 就像 Kubernetes 一样,它用于在本地编排容器并且更方便本地开发,还是 Kubernetes 远不止于此?
    • @VipinMenon Kubernetes 是(或多或少)Docker Swarm 的竞争对手。它适用于多台机器(至少从我所看到的情况来看,它甚至比 docker swarm 更复杂/做更多的事情)。所以是的,不仅仅是本地容器管理。
    • 这样类比是否公平 1. docker-compose minikube 2. docker-swarm kubernetes 集群 3. docker-cloud 由 GCP、AWS 等管理的 kubernetes 集群
    • "Docker swarm 用于在多个主机上运行和连接容器。" : 这里的“连接”是什么意思?网络连接?
    • @someone_smiley 是的。它创建了一个覆盖网络
    【解决方案2】:

    第一个区别是容器引擎和容器编排器。

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

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

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

    Docker 云也是一种 PaaS 产品,可让您通过 docker 引擎 API 运行和编排容器。

    现在,根据您的需求、对基础架构的控制级别和目标受众,您可以在裸机上使用 Kubernetes、Azure ACS 或 Google GKE 等...

    希望这会有所帮助:) 问候

    【讨论】:

    • 我有点困惑,为什么你通常只在 docker 上运行一个容器?虽然我认为 Docker-compose 是一个更好的解决方案,但没有什么可以阻止您在没有它的情况下启动多个容器!
    • 哦,是的,有时我有一个 mysql 在后台运行,然后将 httpd 和 nginx 作为独立容器启动......但是当我想要整个事情自动化时,我肯定会构建一个 docker-compose.yml指定依赖关系、网络等...
    【解决方案3】:

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

    简答:

    • docker-compose: 是一个工具,它采用 YAML 文件描述您的多容器应用程序并帮助您创建启动/停止删除所有这些容器,而无需为每个容器键入多个docker ... 命令。
    • Kubernetes: 是一个用于管理容器化工作负载和服务的平台,它促进了声明式配置和自动化。 What? ? 继续阅读...

    Docker 编写

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

    • 启动、停止和重建服务
    • 查看运行服务的状态
    • 流式传输正在运行的服务的日志输出
    • 在服务上运行一次性命令

    Kubernetes

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

    • 具有容错性,
    • 可以扩展,并按需进行
    • 优化使用资源
    • 可以自动发现其他应用程序,并相互通信
    • 可以从外部访问
    • 无需停机即可更新/回滚。

    许多人认为 Kubernetes 很难学习。这是因为它解决了一系列问题,人们在不了解所有先决条件的情况下试图理解。这使它变得复杂。通过阅读以下概念/术语,开始将拼图的各个部分放在一起。此过程将帮助您了解 Kubernetes 试图解决的问题类型:

    • 12 要素应用,
    • 自动装箱,
    • 自我修复机制,
    • 水平缩放,
    • 服务发现和负载平衡,
    • 自动推出和回滚,
    • 蓝绿部署/金丝雀部署
    • 秘密和配置管理,
    • 存储编排

    而且由于围绕容器及其管理有很多不同的东西,所以请密切关注云原生环境:

    这里是互动版:landscape.cncf.io/

    更新

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

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

    【讨论】:

    • 这个答案已经过时了。 docker.com/blog/…
    • 谢谢@cricket_007 我会密切关注这一点,但我认为这篇 2018 年的博文有点……“营销”。现在是 2020 年,如果您查看 Docker ComposeCompose file version 3 reference 上的文档,则与 Kubernetes 无关。
    • 哦,令人惊讶的是,有一个 compose 层抽象了所有 kubernetes 语法!谢谢@cricket_007。
    • 就我个人而言,当有人问一个关于 kubernetes 之类技术的基本问题时,我会感到不知所措,而有人做的第一件事就是向他们扔 CNCF 风景,以为他们从未听说过的 500 个应用程序的缩略图会让一切更清楚。
    【解决方案4】:

    如果您在同一主机中使用网络容器,请使用 docker compose

    如果您要跨多个主机联网容器,请选择 kubernetes

    【讨论】:

    • 这就是我所期待的答案类型!即使它可以有更多解释,“tl; dr”部分确实是重点。实际上没有其他答案这么说!
    • 在 Kubernetes 中也有很多将容器(多容器 pod 策略,如 sidecar、大使或适配器)或 pod(节点选择器、节点名称、pod 亲和性等)绑定在一起的概念。我不太相信上述答案,除非我遗漏了什么。
    • @Abihishek,我支持你。所以你的意思是`Kubernetes中的一个节点`=a host(cloud server or pc or laptop)
    【解决方案5】:

    Docker Compose 不是生产就绪工具。它非常适用于 PoC 或开发环境,但缺少许多或多或少对于严肃的生产使用来说是赌注的功能。 Swarm 更适合生产,但我永远不会在未开发的场景中投资 Swarm。 Kubernetes 赢得了编排之战,它被纳入 Docker Desktop 并且由所有主要云提供商提供就是证明。 Kubernetes 功能更强大,并且拥有更多的社区和企业支持。

    我建议深入研究 Pluralsight、Linux Academy 等提供的一些 Kubernetes 教程,并构建一个集群以在您选择的云平台(EKS、AKS、GKE 等)中进行使用。如果您想在裸机上启动,请查看 OpenShift,但要认识到在此设置中您失去了 Kubernetes 的一些魔力。

    【讨论】:

    • 同意 k8s 已经“赢了”(目前)。但 Mesos 过去被称为gold standard for production clusters。 DC/OS 在推出企业功能方面做得很好,但现在您甚至可以在 Mesos 环境中运行多个 k8s 集群,并从一个与供应商无关的平台访问它们,那么哪个更好?
    • 来自未来的简短说明:2021 年在这里,K8S 并没有“暂时”赢,它只是赢了。 K8S 是城里唯一的节目,很快就会像 VM 一样无处不在。 Swarm 死了,被它的主人遗弃了。 Docker-compose 仍然被桌面上的开发人员和小型原型使用,但实际上这里的答案都是错误的,并且 compose 根本与编排无关,因此不应与 K8S 进行比较。
    猜你喜欢
    • 2016-10-24
    • 2016-02-16
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2019-03-05
    • 2018-05-30
    • 2019-02-01
    • 2016-07-25
    相关资源
    最近更新 更多