最近很多小伙伴都在问DockerCompose和Kubernetes有什么区别?和dockercompose与docker的区别这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Ap
最近很多小伙伴都在问Docker Compose和Kubernetes有什么区别?和docker compose与docker的区别这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Apache的Mesos和Google的Kubernetes 有什么区别?、b/w docker-compose build vs docker build生成的docker镜像有什么区别?、cgroup, docker,和kubernetes、Docker Compose 与 Dockerfile 有什么区别等相关知识,下面开始了哦!
本文目录一览:- Docker Compose和Kubernetes有什么区别?(docker compose与docker的区别)
- Apache的Mesos和Google的Kubernetes 有什么区别?
- b/w docker-compose build vs docker build生成的docker镜像有什么区别?
- cgroup, docker,和kubernetes
- Docker Compose 与 Dockerfile 有什么区别
Docker Compose和Kubernetes有什么区别?(docker compose与docker的区别)
在深入研究Docker,Google Cloud和Kubernetes的同时,还没有清楚地了解这三个产品,在我看来,这些产品是重叠的,但它们并不兼容。
例如,docker-compose.yml
需要重写文件,以便可以将应用程序部署到Kubernetes。
有人可以对Docker,Docker Compose,Docker Cloud和Kubernetes重叠之处以及其中一个相互依赖的地方进行概括的粗略描述吗?
答案1
小编典典码头工人 :
- Docker是一种容器技术,可让您对应用程序进行容器化。
- Docker是使用其他技术的核心。
Docker撰写
- Docker Compose允许配置和启动多个Docker容器。
- 当您要启动多个Docker容器并且不想使用单独启动每个Docker容器时,Docker Compose通常用作帮助程序
docker run ...
。 - Docker Compose用于在 同一 主机上启动容器。
- 在构建和运行单个Docker 容器时,使用Docker Compose 代替所有可选参数 。
码头工人
- Docker Swarm用于在 多个 主机上运行和连接容器。
- Docker Swarm是一个容器集群管理和编排工具。
- 它管理在多个主机上运行的容器,并执行扩展,在发生崩溃时启动新容器,将容器联网等操作。
- Docker Swarm是生产中的Docker。它是嵌入在Docker引擎中的 本地 Docker 编排工具 。
- 名为堆栈文件的Docker Swarm文件与Docker Compose文件非常相似。
Kubernetes
- Kubernetes是Google开发的 容器编排工具 。
- Kubernetes的目标与Docker Swarm的目标非常相似。
Docker云
- 一项付费企业泊坞服务,可让您在云服务器或本地服务器上构建和运行容器。
- 它提供一个Web UI和一个中央控制面板来运行和管理容器,同时在用户友好的Web界面中提供所有Docker功能。
更新:
Docker云“部分”停产
Docker Cloud上提供应用程序,节点和群集集群管理的服务将于[2020年5月21日]关闭…自动构建和注册表存储服务不会受到影响,并将继续可用
Apache的Mesos和Google的Kubernetes 有什么区别?
摘要:本文来自StackOverFlow上的一个问题,主要讨论Mesos和Kubernetes的区别,相信我们很多人也有同意的疑问。 Kubernetes的开发者Craig回答了这个问题,同时masi也做了概述,不一定对,供读者参考。Kubernetes主要针对容器集群,而 Mesos适用于任何的框架和应用,所以Kubernetes可以运行于Mesos上。
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS 和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。我们 (Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种 与计算集群交互的标准方式。Kubernetes重新实现了Google在构建集群应用时积累的经验。这些概念包括如下内容:
- Pods:一种将容器组织在一起的方法;
- Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);
- Labels:一种可以找到和查询容器的方法;
- Services:一个用于实现某一特定功能的容器组;
因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。
Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。Mesos是分布式系统内核,它可以将不同的机器整 合在一个逻辑计算机上面。当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。有很多的现代化可扩展性的数据处理应 用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。在 某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简 单并且容易管理。
有趣的是Mesos正在接受Kubernetes的理念,并已经开始支持Kubernetes API。因此如果你需要它们的话,它将是对你的Kubernetes应用去获得更多能力的一个便捷方式(比如高可用的主干、更加高级的调度命令、去管控很 大数目结点的能力),同时能够很好的适用于产品级工作环境中(毕竟Kubernetes仍然还是一个初始版本)。
当被问到区别的时候,我会这样回答:
- 如果你是一个集群世界的新手,那Kubernetes是一个很棒的开始。它可以用最快的、最简单的、最轻量级的方式来解决你的问题,并帮 助你进行面向集群的开发。它提供了一个高水平的可移植方案,因为很多厂商已经开始支持Kubernetes,例如微软、IBM、Red Hat、CoreOS、MesoSphere、VMWare等。
- 如果你拥有已经存在的工作任务(Hadoop、Spark、Kafka等),那Mesos可以给你提供了一个将不同工作任务相互交错的框架,然后还可以加入一些新的东西,比如Kubernetes应用。
- 如果你想使用的功能Kuberntes还没实现,那Mesos是一个不错的替代品,毕竟它已经成熟。
b/w docker-compose build vs docker build生成的docker镜像有什么区别?
在构建docker镜像时,如果使用docker-compose build vs docker build构建图像,则image id会有所不同. env有不同的主机名.
还有什么不同?为什么图像不同?
不同之处仅在于构建结果的命名/标记,docker-compose会自动为您执行.
除此之外,docker-compose构建在幕后并没有什么不同,只是一个普通docker构建的包装器.
cgroup, docker,和kubernetes
0. cgroups
跑一个耗cpu的脚本
x=0
while [ True ];do
x=$x+1
done;
top可以看到这个脚本基本占了100%的cpu资源
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30142 root 20 0 104m 2520 1024 R 99.7 0.1 14:38.97 sh
下面用cgroups控制这个进程的cpu资源
mkdir -p /cgroup/cpu/foo/ #新建一个控制组foo
echo 50000 > /cgroup/cpu/foo/cpu.cfs_quota_us #将cpu.cfs_quota_us设为50000,相对于cpu.cfs_period_us的100000是50%
echo 30142 > /cgroup/cpu/foo/tasks
然后top的实时统计数据如下,cpu占用率将近50%,看来cgroups关于cpu的控制起了效果
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30142 root 20 0 105m 2884 1024 R 49.4 0.2 23:32.53 sh
cpu控制组foo下面还有其他的控制,还可以做更多其他的关于cpu的控制
[root@localhost ~]# ls /cgroup/cpu/foo/
cgroup.event_control cgroup.procs cpu.cfs_period_us cpu.cfs_quota_us cpu.rt_period_us cpu.rt_runtime_us cpu.shares cpu.stat notify_on_release tasks
1. docker
docker run --help | grep cgroup
--cgroup-parent string Optional parent cgroup for the container
这个参数指定的cgroup的配置文件的位置,指定位置run后
# docker run --cgroup-parent "/" nginx
localhost:/sys/fs/cgroup/cpu # ls
cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat notify_on_release user.slice
cgroup.event_control cpuacct.usage cpu.rt_period_us docker release_agent
cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us f296b0316c259262e78110174f3b4a7329b026af99a14730f11cc0f215be9741 system.slice
cgroup.sane_behavior cpu.cfs_period_us cpu.shares foo tasks
localhost:/sys/fs/cgroup/cpu # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f296b0316c25 nginx "/entrypoint.sh" 2 minutes ago Up 2 minutes berserk_mclean
其中 f296b0316c25
这个目录就是创建的这个容器的cgroup控制目录
如果--cgroup-parent
没有设置为/
, 那么控制目录应该在 /sys/fs/cgroup/cpu/docker/
下
2. kubernetes控制
kubelet也提供了这个参数,用于定义pod的容器启动的cgroup控制
定义pod
localhost:/tmp/manifest # cat aa.manifest
# Copy of pod.yaml without file extension for test
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
用kubelet裸启动
kubelet --cgroup-root=/ --config /tmp/manifest/
localhost:/sys/fs/cgroup/cpu/docker # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1adc2179227f nginx "nginx -g ''daemon off" 1 seconds ago Up Less than a second k8s_nginx.156efd59_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_8a29cc5d
902c8aa23657 gcr.io/google_containers/pause-amd64:3.0 "/pause" 4 seconds ago Up 3 seconds k8s_POD.b2390301_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_24406b11
观察cgroup的根目录位置
localhost:/sys/fs/cgroup/cpu # ls
1adc2179227fa461ac349357b7fde73fdd47636b868aa5403875d79ca33d584b cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us foo tasks
902c8aa236578d11bc8d97f4a7cfb72465fad1fdca0a6752735191d5638b5460 cgroup.sane_behavior cpu.cfs_period_us cpu.shares notify_on_release user.slice
cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat release_agent
cgroup.event_control cpuacct.usage cpu.rt_period_us docker system.slice
看到1adc了,同时也可以 pause容器的ID, 证明了这个选项起作用了。
Docker Compose 与 Dockerfile 有什么区别
我一直在阅读和学习Docker,并试图正确选择要使用的 Django 设置。到目前为止,有两种:
Docker
Compose或Dockerfile
我知道在Dockerfiles
中使用了Docker Compose
,但我不确定将所有内容放在一个大型 Dockerfile
中是否是一种好习惯,其中包含FROM
针对不同图像的多个命令?
我想使用几个不同的图像,包括:
uwsginginxpostgresredisrabbitmqcelery with cron
请告知使用Docker 设置此类环境的最佳实践。
如果有帮助,我在 Mac 上,所以使用boot2docker。
我遇到的一些问题:
- Docker Compose 与 Python3 不兼容
- 我想将我的项目容器化,所以如果一个大的 Dockerfile 不理想,那么我觉得我需要使用 Docker Compose 将它分解
- 我可以使项目 Py2 & Py3 兼容,所以我倾向于 django-compose
答案1
小编典典答案都不是。
如果您将构建命令添加到项目的docker-compose.yml
.
您的 Docker 工作流程应该是为Dockerfile
您希望创建的每个图像构建一个合适的,然后使用 compose 使用build
命令来组装图像。
build /path/to/dockerfiles/blah
你可以使用where /path/to/dockerfiles/blah
is
where blah’s live 来指定你的个人 Dockerfile 的路径Dockerfile
。
今天关于Docker Compose和Kubernetes有什么区别?和docker compose与docker的区别的分享就到这里,希望大家有所收获,若想了解更多关于Apache的Mesos和Google的Kubernetes 有什么区别?、b/w docker-compose build vs docker build生成的docker镜像有什么区别?、cgroup, docker,和kubernetes、Docker Compose 与 Dockerfile 有什么区别等相关知识,可以在本站进行查询。
本文标签: