docker compose和kubernetes之间有什么区别?

Geo*_*nos 236 docker kubernetes docker-compose

虽然潜入Docker,Google Cloud和Kubernetes,但还没有清楚地理解它们中的所有三个,在我看来这些产品是重叠的,但它们不兼容.

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

有人可以提供一个高级粗略描述Docker,Docker-Compose,Docker Cloud和Kubernetes重叠的位置以及哪一个依赖于另一个?

yam*_*enk 346

Docker:

Docker是一种容器技术,可以让您容纳应用程序.Docker是使用其他技术的核心.

Docker撰写:

允许配置和启动多个docker容器.当您想要启动多个docker容器并且不想单独启动每个Docker容器时,这主要用作帮助程序docker run ....Docker compose用于在同一主机上启动容器.

Docker Swarm:

Docker swarm用于在多个主机上运行和连接容器.Docker swarm是一个容器集群管理和编排工具.它管理在多个主机上运行的容器,并执行诸如扩展,在一个崩溃时启动新容器,网络容器......

Docker swarm是生产中的码头工人.它是嵌入在Docker引擎中的本机 docker 编排工具.

名为stack file的docker swarm文件与docker compose文件非常相似.

Kubernetes:

由Google开发的容器编排工具.Kubernetes的目标与Docker swarm的目标非常相似.

Docker Cloud:

一种付费企业docker服务,允许您在云服务器或本地服务器上构建和运行容器.它提供了一个Web UI和一个中央控制面板来运行和管理容器,同时在用户友好的Web界面中提供所有docker功能.

更新:

Docker云"部分"停止使用

Docker Cloud上提供应用程序,节点和群集集群管理的服务将于5月21日关闭......自动构建和注册表存储服务将不会受到影响并将继续提供

  • 做以下类比是否公平 1. docker-compose <> minikube 2. docker-swarm <> kubernetes 集群 3. docker-cloud <> 通过 GCP、AWS 等管理的 kubernetes 集群 (18认同)
  • 好的,对不起。我想我还是一头雾水。那么这是否意味着 docker-compose 就像 Kubernetes 一样,因为它用于在本地编排容器并且更方便本地开发,还是 Kubernetes 远不止于此? (5认同)
  • @VipinMenon Kubernetes(或多或少)是 Docker Swarm 的竞争对手。它适用于多台机器(并且比 docker swarm 更复杂/做更多的事情,至少从我所见)。所以,是的,不仅仅是本地容器管理。 (2认同)
  • “Docker swarm 用于在多个主机上运行和连接容器。” : 这里的“连接”是什么意思?网络连接? (2认同)
  • @someone_smiley 是的。它创建了一个_覆盖网络_ (2认同)

tgo*_*gos 105

除了@ yamenk的回答之外,我还想在这里添加一些细节,这可能有助于人们了解Kubernetes的历程.

简短回答:

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

Docker撰写

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

Compose具有管理应用程序整个生命周期的命令:

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

Kubernetes

(来自Kubernetes简介):Kubernetes是一个容器协调者,如Docker Swarm,Mesos Marathon,Amazon ECS,Hashicorp Nomad.容器协调器是将主机组合在一起以形成集群的工具,并帮助我们确保应用程序:

  • 是容错的,
  • 可以扩展,并按需执行此操作
  • 最佳地使用资源
  • 可以自动发现其他应用程序,并相互通信
  • 可以从外部世界访问
  • 可以在没有任何停机的情况下更新/回滚.

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

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

并且因为容器及其管理有很多不同的东西,所以请关注Cloud Native格局:

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

在此输入图像描述

  • 就我个人而言,当有人问有关 kubernetes 这样的技术的基本问题时,他们做的第一件事就是向他们展示 CNCF 景观,认为他们从未听说过的 500 个应用程序的缩略图会让一切变得更清楚,这让我感到不知所措。 (4认同)
  • 这个答案已经过时了。https://www.docker.com/blog/simplifying-kubernetes-with-docker-compose-and-friends/ (3认同)
  • 谢谢@cricket_007,我会密切关注这一点,但我认为 2018 年的这篇博文有点......“营销”。现在是 2020 年,如果您查看 [Docker Compose](https://docs.docker.com/compose/) 和 [Compose 文件版本 3 参考](https://docs.docker.com/compose/compose- file/) 没有任何关于 Kubernetes 的内容。 (2认同)
  • 哦,令人惊奇的是,有一个 compose 层抽象了所有 Kubernetes 语法!谢谢@cricket_007。 (2认同)

小智 76

如果您是同一主机内的网络容器,请使用docker compose

如果您是跨多个主机的网络容器,请选择kubernetes

  • 这就是我所期待的答案!尽管它可以有更多的解释,但“tl;dr”部分确实是重点。其他答案实际上都没有这么说! (7认同)

Fra*_*zzi 7

第一个区别是容器引擎和容器协调器之间.

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

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

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

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

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

希望这有帮助:)问候

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

Ash*_*ddy 7

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

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