Играю с LXC. Моя цель - запустить один процесс в контейнере, и теперь я сосредотачиваюсь на процессах, запущенных в моем контейнере.
Когда я создаю базовый шаблон LXC в ubuntu 12.04, у меня работает около десяти процессов (включая cron, ttys, init ...). Когда я делаю то же самое с docker или Heroku dynos (используя ps -ef
), У меня остался только запущенный мной процесс. Это приводит к 2 вопросам:
Докер не использует lxc-create
команда. rootfs
контейнеров (я полагаю) - это загруженные пользовательские изображения. Как они настраивают этот образ, чтобы он запускал только один процесс?
В Dynos на Heroku запущен только один процесс (тот, который пользователи собираются запустить), но поддерживается автоматический перезапуск процесса в случае сбоя этого процесса. Я знаю, что это возможно, если за процессом следит init
или upstart
, но это означает, что по крайней мере init
должен работать в дино (а это не так). Как они этого достигают?
Эти вопросы довольно сложные, я ищу здесь не подробный ответ, а просто общие идеи о том, как это работает.
Вы можете найти базовые инструкции по созданию базового изображения в докеры и взгляните на mkimage
-скрипты в каталог contrib исходного кода. Все сводится к тому, что вы используете debootstrap
инструмент для создания корневой файловой системы ubuntu / debian, заархивируйте ее и импортируйте в docker. Примером создания минимального точного образа 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 выберет зеркало ubuntu рядом с расположением вашего компьютера, вы также можете просто передать стандартный URL-адрес зеркала ubuntu - обратите внимание, что это выбранное зеркало теперь будет жестко закодировано в ваших новых изображениях etc/apt/sources.list
, поэтому вы можете изменить его перед упаковкой, отредактировав его в соответствии с этот
Наблюдение за запущенными процессами в контейнерах докеров - это то, что не входит в задачу самих контейнеров - они просто отвечают за выполнение любой данной команды в изолированной среде. Часть управления демонами должна происходить на вашем хост-компьютере докеров, т.е. вы можете написать выскочку для каждого из ваших желаемых контейнеров.