[mesos]docker容器(Docker Containerizer)
原文链接:http://mesos.apache.org/documentation/latest/docker-containerizer/
Mesos 0.20.0添加支持发起Docker镜像和一些选项设置任务,并且我们计划添加更多的功能。
下面几节介绍为支持docker而改变的API描述和如何启动docker。
include/mesos/mesos.proto
启动(Setup)
为了从机器能使用Docker Containerizer,你需要在启动时添加一个容器参数
例如:mesos-slave –containerizers=docker,mesos
每个从机器都需要安装docker的客户端(version >= 1.0.0)。
如何使用Docker Containerizer(How do I use the Docker Containerizer?)
TaskInfo在0.20.0版本前仅支持设置一个能让任务执行bash命令的CommandInfo数据,或者是一个能发起任务自定义Executor的ExecutorInfo。在0.20.0中,我们添加了ContainerInfo字段到TaskInfo 和 ExecutorInfo,这让像docker的容器可以被配置去执行任务或者执行器。
当把运行docker作为一个任务时,在TaskInfo中必须同时设置命令和container字段,因为这个命令将在创建docker镜像时候使用。ContainerInfo也应该有用来请求docker镜像的Docker 和 DockerInfo的类型。
当把运行docker作为一个执行器时,在TaskInfo中必须设置包含ContainerInfo的ExecutorInfo类型,ContainerInfo也应该有用来请求docker镜像的Docker 和 DockerInfo的类型。
Docker Containerizer做了什么(What does the Docker Containerizer do?)
Docker Containerizer被解析成了调用docker 客户端命令行执行添加、销毁操作的ask/Executor。
当Docker Containerizer作为发起任务操作时,步骤如下:
1.将所有CommandInfo中指定的文件放到沙盒中。
2.从远处仓库中获取docker镜像
3.按照DockerInfo配置运行docker镜像,并映射沙盒目录到docker容器中,后设置目录给MESOS_SANDBOX环境变量。
4.将docker日志打印到沙盒的stdout/stderr文件中。
5.docker将在container中等待发出的命令执行完成。
6.在container推出或者containerizer销毁是,停止并移除docker容器
Docker Containerizer创建的容器都以“mesos-”开头(例如:mesos-abcdefghji),并且设定以”mesos-“为前缀的容器都又slave管理,能自由停止和杀死容器。
当发起docker镜像是一个执行器时,唯一的不同是跳过发起命令执行器而仅获取docker执行器的pid。
提示:为了更容易运行一个docker镜像为一个执行器,在运行docker镜像时,我们当前默认设置到主机网络。
而且由于我们明确地在执行过程中推送镜像,如果镜像仅在本地安装而在执行远程仓库时不可用也会导致失败。
私有docker仓库(Private Docker repository)
对于从私有仓库运行镜像,这个私有仓库包括一个指向含有登陆信息的.dockercfg文件,这个.dockercfg将被推入沙盒,在Docker Containerizer设置HOME环境变量时指向沙盒,然后docker客户端就能自动读取这个配置文件了。运行docker镜像的CommandInfo(CommandInfo to run Docker images)
一个docker镜像当前支持一个接入点、一个默认命令。
如果要用默认命令运行docker镜像(如:docker run image),CommandInfo的值就不能设定。如果设定一个值就会覆盖掉默认命令。
如果要使用已定义好的接入点,那么CommandInfo的shell选项必须设置为false,如果shell选项被设置为ture,Docker Containerizer将使用/bin/sh -c运行用户命令。