虽然潜入Docker,Google Cloud和Kubernetes,但尚未清楚地理解其中的所有三个,在我看来这些产品是重叠的,但它们并不兼容。
例如,需要重新编写docker-compose文件,以便可以将应用程序部署到Kubernetes。
有人可以提供关于Docker,Docker-Compose,Docker Cloud和Kubernetes重叠的位置以及哪一个依赖于另一个的高级粗略描述?
答案 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
:是平台,用于管理容器化工作负载和服务,这有助于声明性配置和自动化。什么?继续阅读... (来自文档):Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。
Compose具有管理应用程序整个生命周期的命令:
- 启动,停止和重建服务
- 查看正在运行的服务的状态
- 流式传输运行服务的日志输出
- 在服务上运行一次性命令
(来自Introduction to Kubernetes):Kubernetes是一个容器协调器,如 Docker Swarm,Mesos Marathon,Amazon ECS,Hashicorp Nomad 。容器协调器是将主机组合在一起以形成集群的工具,并帮助我们确保应用程序:
- 是容错的,
- 可以扩展,并按需执行此操作
- 以最佳方式使用资源
- 可以自动发现其他应用程序并相互通信
- 可从外部世界访问
- 可以在没有任何停机的情况下更新/回滚。
许多人认为Kubernetes很难学。这是因为它解决了一系列问题,人们在不知道所有先决条件的情况下试图理解。这使它变得复杂。通过阅读以下概念/术语,开始将拼图的各个部分放在一起。这个过程将帮助您了解Kubernetes试图解决的问题类型:
因为围绕容器及其管理有很多不同的东西,所以请关注Cloud Native景观:
此处的互动版:landscape.cncf.io/
答案 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是最好的。
答案 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,但我们可以在该平台上管理多个容器,负载均衡器等等。