如何让Docker容器长久驻留Mesos-Slave


ZooKeeper+Mesos+Marathon+Docker

Docker容器如何长久在Mesos上运行,比如容器上配置了bind服务,对外提供服务。
已邀请:

徐磊 - BlackOps@Qunar

赞同来自: madayang chuckzhang xeonzhang


明白你的问题了。分几个部分回答你吧!

首先明确一件事情:

你想让docker容器变成持续运行的,必须执行一个命令让它hang在那里,比如你用到的ping,或者tail -f,或者nginx的非daemon(nginx-g daemon off;)方式。

所以这个根本不是Marathon的问题,而是你没有用明白Docker,抛开Marathon,你本地执行docker run centos sleep 50过50秒也自动退出容器。

你应该先找到让你的容器hang在那里的方式,再去发布到Marathon上。

不会写的话可以参考官方的镜像学习,比如nginx(重点是CMD里的那个-g daemon off;)

其次,Marathon分不太清楚你是怎么退出的:

底层的Mesos会启动一个shell,执行docker wait XXXX判断容器是否退出,所以这块你要注意,不要用exit code一类作为正常/异常退出的条件,Mesos根本不关心这个,只要不是它自己kill的,都认为是出问题了,并通知Marathon做二次调度,结果就是你看到的那一堆Exit的容器了。

tiger435 - 知识面虽广,却不一一精通。有技术危机感及强迫症,常常陷于无法学会所有IT技术的泥沼不能自拔。

赞同来自: -无夏之年-


例如运行一个tomcat的服务,你可以使用tomcat的catalina.sh run 来实现长久主流,marathon会根据当前程序运行的情况来识别task是否已经结束,如果运行在后台,marathon就认为任务结束了

徐磊 - BlackOps@Qunar

赞同来自:


Marathon本身就是一个service框架啊,运行在上面的app都是持续运行的,没理解你说的“如何长久在Mesos上运行”。

你想让你的容器达到一个什么效果?补充下。

madayang

赞同来自:


我发现docker 运行起来后,slave上会有很多exit的docker容器 ,基本是任务结束就重启一个,比如,我运行sleep 50 那就是50秒后,就会重启一个task,也就是docker 容器
当我docker run centos ping x.x.x.x的时候是长久运行的。我意思,我如果我docker 镜像里有web服务,当我run起来后,或者说executor执行了docker 镜像后可以长久运行。
也许我表达的差了些,抱歉

madayang

赞同来自:


ID Name State Started Host

docker2.ee3067d3-4027-11e5-b6cb-56847afe9799 docker2 RUNNING 2015-08-11T20:53:15+0800 kenfai.net Sandbox
docker3.b4ead871-4027-11e5-b6cb-56847afe9799 docker3 RUNNING 2015-08-11T20:51:39+0800 kenfai.net Sandbox
ping.34c3135e-4027-11e5-b6cb-56847afe9799 ping RUNNING 2015-08-11T20:48:05+0800

Completed Tasks

ID Name State Started Stopped Host

docker2.cfc34062-4027-11e5-b6cb-56847afe9799 docker2 FINISHED 2015-08-11T20:52:24+0800 2015-08-11T20:53:14+0800 Sandbox
docker2.b156b530-4027-11e5-b6cb-56847afe9799 docker2 FINISHED 2015-08-11T20:51:33+0800 2015-08-11T20:52:23+0800 Sandbox
docker2.91bccd8f-4027-11e5-b6cb-56847afe9799 docker2 FINISHED 2015-08-11T20:50:42+0800 2015-08-11T20:51:32+0800 t Sandbox

madayang

赞同来自:


task docker3:

curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" http://x.x.x.x:8080/v2/apps -d '{
"container": {
"type": "DOCKER",
"docker": {
"network": "HOST",
"image": "centos"}
},
"cpus": 0.4,
"cmd": "ping www.baidu.com",
"mem": 25,
"id": "docker3",
"instances": 1
}'
task docker2:
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" http://x.x.x.x:8080/v2/apps -d '{
"container": {
"type": "DOCKER",
"docker": {
"network": "HOST",
"image": "centos"}
},
"cpus": 0.4,
"cmd": "sleep 50s",
"mem": 25,
"id": "docker3",
"instances": 1
}'

madayang

赞同来自:


[root@x.x.x.x. ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9cd0678df3e centos:latest "/bin/sh -c 'sleep 5 9 seconds ago Up 8 seconds mesos-20150810-212610-593307769-5050-833-S0.be9d1a30-7a80-476d-9103-01d2f26f2e19

801d9c1508de centos:latest "/bin/sh -c 'sleep 5 About a minute ago Exited (0) 9 seconds ago mesos-20150810-212610-593307769-5050-833-S0.64a5d6b0-94a7-4643-96ce-5d2477ec58d6

3c71507b9b19 centos:latest "/bin/sh -c 'sleep 5 About a minute ago Exited (0) About a minute ago mesos-20150810-212610-593307769-5050-833-S0.9e544de1-4495-45b6-958c-ae3f1561002b

854a807c7aaf centos:latest "/bin/sh -c 'sleep 5 2 minutes ago Exited (0) About a minute ago mesos-20150810-212610-593307769-5050-833-S0.cd853fb2-2991-48f9-a5c8-78c9a040d624

035ea3adc47b centos:latest "/bin/sh -c 'sleep 5 3 minutes ago Exited (0) 2 minutes ago mesos-20150810-212610-593307769-5050-833-S0.f22030aa-4e88-4370-a2c8-7b24d0a966d9

9e7a7c8e4378 centos:latest "/bin/sh -c 'ping ww 4 minutes ago Up 4 minutes mesos-20150810-212610-593307769-5050-833-S0.e7486beb-5054-4a72-8a91-fb4d43b22fff

07de46190f82 centos:latest "/bin/sh -c 'sleep 5 4 minutes ago Exited (0) 3 minutes ago mesos-20150810-212610-593307769-5050-833-S0.7ddb8901-3286-43a7-9dc2-192a36c395ec

4e38147efc6e centos:latest "/bin/sh -c 'sleep 5 5 minutes ago Exited (0) 4 minutes ago mesos-20150810-212610-593307769-5050-833-S0.b4dece76-1795-4b61-bf40-e80a02e36df7

madayang

赞同来自:


像task docker3: docker run centos ping www.baidu.com 就是长久运行.
task docker2: docker run centos sleep 50s就是运行结束后重新运行

madayang

赞同来自:


多謝,了解了

got it 。thanks 我也被这个问题纠结了好久

要回复问题请先登录注册