Kubernetes Pod和Docker Compose(s)(Composures?)之间有哪些区别?

70
Kubernetes中的Pod和Docker Compose脚本生成的“组合”都会生成虚拟计算机集群。这些集群中的计算机都可以进行配置,以相互通信,因此您可以编写一个脚本来镜像整个端到端的生产配置,并通过单个脚本在任何容器主机上部署该集群。
考虑到这两个系统的相似性,我很难理解它们之间的区别。为什么我要选择其中之一?它们是互斥的系统还是我可以在Kubernetes中运行组合?设计容器系统时需要考虑哪些重要因素?如果我打算在今天设计网站的架构并尝试构建基于容器的系统,那么我应该优先考虑哪些事项?(与单台机器系统相比)
3个回答

56

docker compose只是声明需要启动的容器的一种方式,它并不涉及节点或集群的概念,除非它启动了Swarm主节点和Swarm节点,但这需要使用docker swarm)
更新于2016年7月,7个月后:docker 1.12模糊了界限,并包括了“Swarm模式”

它与kubernetes大相径庭,后者是谷歌用来管理数千个容器组(如Pod),跨越数十或数百台机器的工具。

Kubernetes Pod更接近于Docker Swarm

想象一下,个别的Docker容器就像装箱子一样。需要放在一起的箱子因为它们需要到达同一个地点或者彼此有亲和力,所以被装进了航运集装箱中。
在这个比喻中,装箱子就是Docker容器,而航运集装箱则是Kubernetes pod。

下方评论所述,ealeon说道:

我认为pod等价于compose,只不过Kubernetes可以协调pod,而除非与Swarm一起使用,否则没有任何东西可以协调compose。

顺便提一下,您可以使用docker-compose启动Kubernetes命令

http://3.bp.blogspot.com/-MDUsXIy-lt0/VMuhJ9jBefI/AAAAAAAAA0I/qPuy0N8UXWA/s1600/Screen%2BShot%2B2015-01-30%2Bat%2B7.19.27%2BAM.png

关于Kubernetes与其他容器管理系统(如Swarm)的区别,Kubernetes是谷歌开发的第三代集群管理器。虽然两者都可以创建多容器应用程序,但Pod还作为部署和水平扩展/复制的单位,而Docker Compose不提供此功能。此外,您不会直接创建Pod,而是使用控制器(例如复制控制器)。Pod存在于更大的平台中,该平台提供了共同位置(协同调度)、命运共享、协调复制、资源共享和依赖项管理。Docker Compose则独立存在,具有其自己的docker-compose.yml文件。您可以在Google Cloud Platform Podcast的第3集中了解更多关于Kubernetes的信息。

1
谢谢 Von。根据 Docker Compose 文档 https://docs.docker.com/compose/,这是创建多容器应用程序的一种方式,而 dockerfile 相当于单个机器的等效物。因此,POD ~= COMPOSE(我想)。 - Alex C
1
@AlexC 是的,但 Pod 也作为部署单元和横向扩展/复制的一种服务,而 Docker Compose 并不提供。此外,您不直接创建Pod,而是使用控制器(如副本控制器)。Pod 生存在更大的平台内,该平台提供了 Co-location(共同调度)、命运共享、协调复制、资源共享和依赖管理。Docker Compose 独立存在于其 docker-compose.yml 文件中。 - VonC
2
我认为这个答案不正确。看起来docker-compose.yml确实有节点和集群的概念。https://github.com/docker/compose/blob/release/docs/compose-file.md 我认为pod与compose等价,只是kubernetes可以编排pod,而除非与swarm一起使用,否则没有任何东西可以编排compose,就像你提到的那样。 - ealeon
1
Docker Compose是否具有Swarm模式(如上所述),最后一条评论明确指出了主要区别;应该在被接受的答案中明确指出。 - Ben
1
@Ben 我同意。我已经在答案中包含了ealoin的评论。 - VonC
显示剩余2条评论

15

就网络方面而言,有以下差别:

Pod内的应用程序都使用相同的网络命名空间(相同的IP和端口空间),因此可以使用localhost“找到”彼此并进行通信。由于这个原因,Pod内的应用程序必须协调它们对端口的使用。每个Pod在一个平坦的共享网络空间中都有一个IP地址,并且可以与网络上的其他物理计算机和Pod进行全面通信。

  • Docker-compose中的容器被分配不同的IP地址。有关更多信息,请参见此博客文章

10
尽管上面的答案清楚地回答了这个问题,但是我想添加一些快速的说明。
1. Docker-Compose和Kubernetes pod都是配置文件(Yaml),用于定义从镜像中创建的容器实例。
2. Docker Compose本身只是一个文件,具有包含服务(容器)进行通信的能力;本质上它是非分布式的。
3. Kubernetes pods也可以定义多个容器,但主要区别在于分配给可用节点的概念。
4. 最后,Docker Compose是一个工具,用于定义和运行无编排的多容器Docker应用程序,除非使用Swarm指定。而pod包含多个容器,在集群节点自动共享如果可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接