发布于 2015-12-05 11:04:08 | 930 次阅读 | 评论: 0 | 来源: 网络整理
Mesos 0.20.0开始支持在docker镜像中运行任务,同时是Docker选项支持的子集,后续版本还会添加更多支持。
用户可以以任务或者执行器的方式加载docker镜像。
下文包含关于Docker支持的详细的API改变和设置Docker的方法。
使用docker来运行被控,需要在启动的时候,添加参数,如下:
mesos-slave --containerizers=docker,mesos
docker容器化的被控端,还需要在被控端里安装 Docker 命令行工具客户端(版本 >= 1.0.0)。
若在被控端启用iptables,使用下面规则,以确保iptables允许docker桥连的流量能够通过:
iptables -A INPUT -s 172.17.0.0/16 -i docker0 -p tcp -j ACCEPT
版本0.20.0以前,TaskInfo只允许使用 CommandInfo 来加载 一个命令行任务,或ExecutorInfo来加载自定义的Executor任务。
版本0.20.0之后,TaskInfo 和 ExecutorInfo 多了一项 ContainerInfo ,以允许使用容器化工具,比如Docker,来运行任务或者执行器。
以任务方式运行 Docker 镜像,在TaskInfo中必须设置 命令行和container field。因为Docker Containerizer需要使用伴随的命令来加载docker镜像。ContainerInfo必须设类型为Docker,DockerInfo设为所需要加载的docker镜像。
以执行器方式运行Docker镜像,在TaskInfo中必须设置 ExecutorInfo 包含类型为docker的ContainerInfo。CommandInfo 会被用来启动执行器。注意,当docker镜像被当作Mesos执行器加载,会在它启动时注册为被控。
docker容器工具会把 任务和执行器的加载和销毁命令转换为Docker CLI命令。
docker容器工具在把容器当任务加载时,会:
docker容器工具通过标示 前缀为 mesos-
后附着被控端slave id (比如mesos-slave1-abcdefghji)的命名规则来加载、停止和销毁容器,并认为所有mesos-
前缀开头的容器都是在被控端管理的,可以按需被停止或结束。
当以执行器来加载docker容器的时候,和上面略有不同:不用加载命令行执行器,只需要知道dokcer容器执行器的进程号(PID)。
Note:目前Docker镜像的网络使用默认的主机连接方式,以方便让docker镜像以执行器方式运行。
容器工具也支持强制拉取镜像,当关闭这功能时,若主机上没有镜像时,docker镜像将只被重新更新。
可在 .dockercfg
中指定 URI地址和登录信息,来使用 Docker私用库。 .dockercfg
会被docker容器工具拉入沙箱中,并设为HOME环境变量,以使docker CLI自动应用该配置。
运行docker镜像有两种方式:默认命令行和自设命令入口。
若要使用默认命令行来载入 Docker 镜像的方式(比如 docker run image
), 那么CommandInfo配置项则不能设值。因为若设置了,则会覆盖掉默认命令。
若使用自定义命令入口载入docker镜像的方式,CommandInfo的shell项必须设为 false。因为若设为true,docker容器工具将会以 /bin/sh -c
来运行自设命令,同时也会被当作运行镜像的参数。
Docker容器化工具支持在slave节点重启的时候恢复Docker容器的功能(不论该slave节点是否运行在Docker容器中运行与否)。
当启用 docker_mesos_image
配置项的时候,Docker容器化工具会认为自己容器中运行,从而更变其相应的恢复和加载容器机制。