我正在玩LXC。 我的目标是在一个容器中运行一个进程,现在我正在关注在我的容器中运行的进程。
当我在Ubuntu 12.04上创build一个基本的LXC模板时,我已经有了十个进程正在运行(包括cron,ttys,init …)。 当我用Docker或Heroku dynos(使用ps -ef )做同样的事时,我只有我启动的过程。 这导致了2个问题:
Docker不使用lxc-create命令。 容器的rootfs (我想)是自定义的图像下载。 他们如何调整这个图像,使其只运行一个进程?
在Heroku上的Dynos只有一个进程正在运行(一个用户打算运行),但支持进程的自动重新启动,如果这个崩溃。 我知道如果这个过程是由init或upstart监督的话,这是可能的,但是这意味着至lessinit应该在dyno中运行(事实并非如此)。 他们如何实现这一目标?
这些问题是相当复杂的,我不是在这里寻找一个详细的答案,而只是关于这个工作的一般想法。
你可以在mkimage 文档中find一些关于创build一个基本镜像的基本指令,并且看看源代码的contrib目录中的mkimage -scripts。 最重要的是你使用debootstrap工具来创build一个ubuntu / debian根文件系统,tar这个并导入到docker中。 从零开始构build一个最小的ubuntu精确(12.04 LTS)映像的例子是:
debootstrap --verbose --variant=minbase --include='iproute,iputils-ping' --arch=amd64 precise /tmp/precise/ `curl -s http://mirrors.ubuntu.com/mirrors.txt | head -1`
最后一个curl位会select一个接近你的机器位置的ubuntu镜像,你也可以简单地传递一个标准的ubuntu镜像url – 注意这个镜像现在被硬编码到你的新镜像etc/apt/sources.list ,所以您可能需要在包装之前修改它,按照这个方法进行编辑
在docker集装箱内运行stream程的监督是不是你的容器本身的任务 – 他们只负责在孤立的环境中运行任何给定的命令。 守护进程pipe理部分应该发生在你的docker主机上,也就是说你可以为每个你想要的容器写一个upstart作业。