Kubernetes Pods 和 Docker Compose(s)(Composures?)之间有什么区别?

What are the differences between Kubernetes Pods and Docker Compose(s) (Composures?)

Kubernetes Pods 和 Docker Compose 脚本(以下简称:"Compositions")的结果似乎都会产生虚拟计算机集群。

集群中的所有计算机都可以配置为相互通信,因此您可以编写一个脚本来反映整个端到端生产配置。单个脚本允许您在任何容器主机上部署该集群。

鉴于这两个系统之间的相似性,我很难理解两者之间的区别。

为什么我会选择一个而不是另一个?它们是相互排斥的系统还是我可以 运行 在 kubernetes 中组合。

在设计容器系统时是否需要考虑任何重要的考虑因素?如果我 今天 正在为一个网站设计架构,并且 喜欢 尝试构建一个基于容器的系统。我应该设计的最高优先级的东西是什么? (与在单机系统上构建相比)

docker compose is just a way to declare the container you have to start: it has no notion of node or cluster, unless it launches swarm master and swarm nodes, but that is docker swarm)
7 个月后的 2016 年 7 月更新:docker 1.12 模糊了界限,includes a "swarm mode".

它与 kubernetes 有很大的不同,google 工具可以将数千个容器组管理为 Pod,超过数十或数百台机器。

A Kubernetes Pod would be closer from a docker swarm:

Imagine individual Docker containers as packing boxes. The boxes that need to stay together because they need to go to the same location or have an affinity to each other are loaded into shipping containers.
In this analogy, the packing boxes are Docker containers, and the shipping containers are Kubernetes pods.

作为 by ealeon:

I think pod is equivalent to compose except that kubernetes can orchestrated pods, whereas there is nothing orchestrating compose unless it is used with swarm like you've mentioned.

你可以launch kubernetes commands with docker-compose by the way.

In terms of how Kubernetes differs from other container management systems out there, such as Swarm, Kubernetes is the third iteration of cluster managers that Google has developed.

您可以在 episode #3 of Google Cloud Platform Podcast.

中了解有关 kubernetes 的更多信息

虽然两者都可以创建多容器应用程序,但 Pod 也可以用作部署单元和水平 scaling/replication,docker compose 不提供。
另外,您不直接创建 pod,而是使用控制器(如复制控制器)。

POD 存在于一个更大的平台中,该平台提供协同定位(协同调度)、命运共享、协调复制、资源共享和依赖管理。
Docker-compose 生活......靠自己,用它的 docker-compose.yml 文件

尽管上面的回答清楚地回答了这个问题,我还是要添加一些简短的注释。

  1. Docker-Compose 和 Kubernetes pods 都是配置 从图像定义容器实例的文件 (Yaml)。

  2. Docker compose 本身只是一个文件,可以包含用于通信的服务(容器);它本质上是非分布式的。

  3. Kubernetes pods 也可以定义多个容器,但这里的主要区别在于可用节点之间的分布概念。
  4. 最后,Docker Compose 是一个用于定义和 运行 的工具 multi-container Docker 没有编排的应用程序,除非 告诉用 Swarm 这样做。一个 pod 包含多个容器,如果可用,这些容器会自动在节点集群中共享。

在网络方面存在差异:

  • 一个 pod 中的容器共享相同的 IP 地址。来自 kubernetes docs:

The applications in a pod all use the same network namespace (same IP and port space), and can thus “find” each other and communicate using localhost. Because of this, applications in a pod must coordinate their usage of ports. Each pod has an IP address in a flat shared networking space that has full communication with other physical computers and pods across the network.

  • docker-compose 中的容器被分配了不同的 IP 地址。有关详细信息,请参阅此 blog post