Mesos和Docker的集成
摘要: 众所周知,Mesos全面支持Docker。但是这意味着什么呢?在命令行里运行docker run...就可以使用Docker了。还需要做什么?让我们一起研究下Mesos的高级特性——和Docker的集成。本文选自《用Mesos框架构建分布式应用》。
因为Docker本身想管理整个容器,从chroot、命名空间到整个命名空间的cgroup,它会和默认的Mesos容器发生冲突。因此,Mesos添加了容器机的支持,一种可插拔的机制,让Mesos的容器机子系统可扩展:最初Mesos的基于 LXC/cgroup的容器被引入到容器机API里,Docker是添加的第一个新的容器机,现在也有了全面的文档协议,介绍如何添加新的容器机,比如KVM虚拟机。
使用Docker
为了使用Docker容器机技术,必须将其包含进Mesos slave的命令行里。比如,mesos-slave --containerizers=docker,mesos...允许在该台slave上使用Docker和Mesos容器。
可能还想增加执行器的注册超时时间,这样Mesos不会在容器还在下载的时候就认为容器发生了故障。一开始可以设成五分钟,确保有足够的时间下载Docker镜像。所以,slave命令行类似:
mesos-slave --containerizers=docker,mesos \
--executor_registration_timeout=5mins ...
使用带有应用程序的Docker非常简单——一旦启用了对Docker的支持,只需要设置TaskInfo或者ExecutorInfor里的container字段(类型为ContainerInfo)。
令人困惑的是,消息CommandInfo.ContainerInfo并不是正确的消息——需要在带有Docker相关字段的mesos.proto里设置最高级别的ContainerInfo。
要想使用Docker,需要将ContainerInfo里的type设置为DOCKER,并且将docker字段设置到ContainerInfo.Docker消息的一个实例里,该消息的image属性设置为Docker镜像的名称(比如myusername/webapp)。这里可以配置很多Docker参数,比如是使用HOST还是BRIDGE网络,映射使用哪些端口或者额外的Docker命令行参数。如果想让Docker容器使用Dockerfile里指定的docker run ...,还必须将TaskInfo的CommandInfo设置成shell=false。如果设置成shell=true,就需要禁用Dockerfile里的run,指定的command会由sh -c “”来运行。
当启动Docker容器机任务时,slave会首先获取(并且解包)沙箱里所有指定的URI,并且将Docker镜像拉取到本地。然后,slave通过运行docker启动Docker镜像。docker命令的HOME环境变量指向该沙箱,因此可以通过获取到的URI来配置Docker(详见下面的注意事项)。在Docker镜像里可以使用该沙箱,其路径保存在MESOS_SANDBOX环境变量里。最后,Docker的stdout和stderr会被重定向到Mesos沙箱里名为stdout和stderr的文件上。
高级Docker配置
必须记住的一点是,Docker容器机总是会尝试从registry里拉取Docker镜像。这意味着无法使用仅在本地安装了的Docker镜像——必须在某个地方部署该镜像。如果想要使用私有registry,可以提供一个.dockercfg文件。该文件由一个URI指定,这样Mesos slave就能够使用其自动获取URL的功能将.dockercfg文件拷贝到Docker进程所使用的HOME目录下。
相同的API也适用于基于Docker的执行器,唯一不同之处在于,执行器代码实际上可以在Docker容器内运行。要实现这一目的,需要完成上文所述的所有事情,但是是在ExecutorInfo消息里,而不是TaskInfo消息里。
本文选自《用Mesos框架构建分布式应用》,点此链接可在博文视点官网查看此书。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
Mesos和Docker的集成的更多相关文章
- 持续交付的Mesos与Docker导入篇
变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0.虚拟化.云计算.大数据.微架构.DevOps再到今天的容器Docker与Mesos. Docker的出现方便了 ...
- [转]通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
http://www.csdn.net/article/2015-07-31/2825348 [编者按]时下,对于大部分IT玩家来说,Docker和Mesos都是熟悉和陌生的:熟悉在于这两个词无疑已成 ...
- Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)
1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...
- 通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统
[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...
- 从零开始搭建Jenkins+Docker自动化集成环境
本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...
- DCOS实践分享(3):基于Mesos 和 Docker企业级移动应用实践分享
2016年1月24日 8:00—19:00 北京万豪酒店(东城区建国门南大街7号) @Container大会是由国内容器社区DockOne组织的专为一线开发者和运维工程师设计的顶级容器技术会议,会议强 ...
- 【原创】大数据基础之Mesos+Marathon+Docker部署nginx
一 安装 安装docker:https://www.cnblogs.com/barneywill/p/10343091.html安装mesos:https://www.cnblogs.com/barn ...
- 最佳实战Docker持续集成图文详解
最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...
- 基于Mesos和Docker的分布式计算平台
基于Mesos和Docker的分布式计算平台 http://www.csdn.net/article/2015-06-09/2824906
随机推荐
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- pygame 笔记-2 模仿超级玛丽的弹跳
在上一节的基础上,结合高中物理中的匀加速直线运动位移公式 ,就能做出类似超级玛丽的弹跳效果. import pygame pygame.init() win = pygame.display.set_ ...
- 【独家】硅谷创业公司在中国常跌的五个坑|禾赛科技CEO李一帆柏林亚太周主题演讲
[独家]硅谷创业公司在中国常跌的五个坑|禾赛科技CEO李一帆柏林亚太周主题演讲 李一帆 Xtecher特稿作者 关注 Xtecher推荐 演讲者:李一帆 翻译:晓娜 网址:www.xt ...
- React组件间的通信
1.子组件调用父组件,采用props的方式进行调用和赋值,在父组件中设置相关属性值或者方法,子组件通过props的方式进行属性赋值或者方法调用: 2.父组件调用子组件,采用refs的方式进行调用,需要 ...
- Spark(四十五):Schema Registry
很多时候在流数据处理时,我们会将avro格式的数据写入到kafka的topic,但是avro写入到kafka的时候,数据有可能会与版本升级,也就是schema发生变化,此时如果消费端,不知道哪些数据的 ...
- yarn upgrade
更新一个依赖 yarn upgrade 用于更新包到基于规范范围的最新版本 yarn upgrade --latest # 忽略版本规则,升级到最新版本,并且更新 package.json .
- 汉字编码 (GB2312 GBK GB18030)
GB2312 收录简化汉字及符号.字母.日文假名等共7445个图形字符,其中汉字占6763个 每个符号都用两个字节表示,每个字节均采用七位编码表示,习惯上 第一个字节是高字节,第二个字节是低字节 GB ...
- C# 图解视频教程 全集200多集
观看地址 https://www.bilibili.com/video/av21896829/?spm_id_from=333.23.home_video_list.3 学习交流地址 http://w ...
- linux内核剖析(十)进程间通信之-信号量semaphore
信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线 ...
- 【转载】SpringCloud-Eurek 心跳阈值说明
在使用eureka过程中,查看监控界面,出现: EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE ...