docker compose和kubernetes之间的区别是什么?

时间:2017-11-28 16:34:31

标签: docker kubernetes docker-compose

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

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

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

12 个答案:

答案 0 :(得分:253)

<强>泊坞

Docker是一种容器技术,可以让您对应用程序进行容器化。 Docker是使用其他技术的核心。

Docker撰写:

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

Docker Swarm:

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

Docker swarm是生产中的码头工具。它是嵌入在Docker引擎中的原生 docker 编排工具

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

<强> Kubernetes:

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

Docker Cloud:

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

<强>更新

Docker cloud "partially" discontinued

  

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

答案 1 :(得分:76)

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

简答:

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

Docker Compose

  

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

     

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

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

Kubernetes

  

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

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

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

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

因为围绕容器及其管理有很多不同的东西,所以请关注Cloud Native景观:

此处的互动版:landscape.cncf.io/

enter image description here

答案 2 :(得分:8)

首先区分容器引擎和容器协调器。

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

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

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

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

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

希望这有帮助:) 此致

答案 3 :(得分:6)

如果您的网络容器具有相同的主机,请使用 docker compose

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

答案 4 :(得分:6)

Docker Compose 尚未投入生产。它非常适合PoC或开发环境,但是缺少很多功能,这些功能或多或少会严重影响生产。 Swarm更适合生产,但我绝不会在新环境中投资Swarm。 Kubernetes赢得了编排大战,这体现在Kubernetes包含在Docker Desktop中,并且所有主要的云提供商都提供了它。 Kubernetes的功能更加强大,并且拥有更多的社区和企业支持。

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

答案 5 :(得分:2)

给您一个比喻; Docker的作曲家就像一艘私人货船的船长,可以在船上装载和安排多个集装箱,而Kubernetes就像是管理多艘船的港口控制系统;队长集装箱装卸;船舶之间的通讯;他们的旅行时间表;等

答案 6 :(得分:2)

Docker

Docker是世界领先的软件容器平台。该工具旨在通过使用容器使部署和运行应用程序更加容易。

请点击here!进一步了解docker。

Docker Compose

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

Docker Swarm

Docker swarm是一个容器编排工具,这意味着它允许用户管理跨多个主机部署的多个容器。 Docker Compose文件用于部署多容器Docker应用程序。

Kubernetes

Kubernetes是Google开发的容器编排工具。 Kubernetes的目的与Docker Swarm的目的非常相似。但是当我们将两者进行比较时,Kubernetes是最好的。

Kubernetes vs Docker Swarm

答案 7 :(得分:1)

Docker Compose:

docker-compose.yml文件中,每个条目都可以选择获取docker-compose来构建映像。每个条目可以代表一个我们要构建的容器,每个条目定义网络要求或端口。

Kubernetes:

Kubernetes希望所有映像都已构建,并且我们要创建的每个对象只有一个配置文件,我们必须手动设置所有网络。

因此,我们确保将映像托管在Docker Hub上,创建一个配置文件以创建容器,并创建一个配置文件以建立网络。

答案 8 :(得分:1)

Docker撰写: 无需任何yaml文件,即可直接运行docker容器。但借助Docker撰写工具,可以在名为docker-compose.yml文件的文件中定义容器属性。请找到以下示例yml文件以了解更多详细信息。

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

图像名称,副本数等。可以通过yml文件进行配置。

Kubernetes: 这是在Google构建的Docker之上运行的容器管理平台。 Docker swam是由docker本身构建的另一个容器管理平台。 Kubernetes还提供了将与Pod相关的配置(与Docker中的容器相对应)保存在yaml文件中的功能,例如docker compose。例子yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

在此还可以提供图像,要打开的端口以及Pod到主机端口的映射等。像docker compose一样,kubectl apply -f是运行此文件的命令。

答案 9 :(得分:0)

Docker-Compose是一个部署文件,该文件使用其环境(例如卷,网络,运行命令等)预定义了一个或多个容器。

另一方面,Kubernetes是一个系统,可通过它协调Docker容器和其他微服务,并使其在多个节点之间可扩展且可靠

答案 10 :(得分:0)

docker-compose只是您维护的文件,可以帮助您轻松管理容器。因此,在最底层,您需要由docker守护程序负责监视各个容器,但是您几乎必须手动执行每个操作 y向守护程序发出命令,那么您就有了docker-compose,它实际上使您可以一起管理各种容器,例如一起启动所有容器,杀死它们或重新启动它们。您可以使用Shell脚本来实现相同目的,但是监视每个容器将变得非常复杂,并且您将不得不编写docker-compose免费提供给您的各种方法。

Kubernetes只是管理在其上安装容器PERIOD的计算机的一种方式。现在,在Kubernetes中,最低层的单元是一个吊舱,从而使开发人员可以从中抽象出各种与运维相关的工作,而使用docker swarm,您仍然必须戴上运维帽以维护运行容器的机器。

答案 11 :(得分:0)

Docker compose是一种工具,我们可以一次运行并执行多个互连的容器,而不是为每个容器创建或执行docker命令。

虽然是kubernetes,但我们可以在该平台上管理多个容器,负载均衡器等等。