Запустить контейнер Docker с помощью активации сокета systemd?

Можно ли запустить отдельный контейнер Docker, например веб-сервер, который предоставляет (прослушивает) порт, с помощью активации сокета systemd функция? Идея состоит в том, чтобы сэкономить ресурсы, запустив контейнер только тогда, когда он действительно нужен в первый раз (и, возможно, остановите его снова, когда он простаивает, чтобы сэкономить ресурсы).

Примечание. Этот вопрос не касается запуска самого демона Docker с помощью активации сокета (который уже поддерживается), но о запуске отдельных контейнеров по запросу.


person Markus Hallmann    schedule 16.07.2014    source источник
comment
Я думаю, что это возможно, но сложно найти что-либо вокруг .. Я готов написать сообщение в блоге, но все еще не могу понять, как передать сокет от хоста к инициированному докеру. Может быть, просто смонтировать его как том .. Вот чтение: 0pointer.de/blog /projects/socket-activated-containers.html libvirt.org/drvlxc.html#activation < / а>   -  person Pierre Ozoux    schedule 04.09.2014
comment
Обязательно ли использовать функцию активации сокета systemd? Как насчет использования Docker API для запуска и остановки контейнеров по запросу?   -  person rexposadas    schedule 06.09.2014
comment
Вы нашли способ остановить процесс, когда он не используется?   -  person Arka    schedule 06.06.2015
comment
Арка: Я еще не тратил на это время, так как даже активация сокета все еще отсутствует. Но я предполагаю, что сервер может попытаться отслеживать активность, и когда он достаточно долго простаивает, запускает завершение работы.   -  person Markus Hallmann    schedule 07.06.2015
comment
developer.atlassian.com/blog/2015/03/ Разве это не то, что вы хотите?   -  person Arka    schedule 07.06.2015
comment
Арка: Спасибо за ссылку, которая показывает, как можно использовать systemd-socket-proxyd для обхода того, что Docker явно не поддерживает его напрямую. В идеале Docker поддерживал бы его напрямую, чтобы избежать необходимости в обходных решениях, таких как systemd-socket-proxyd, но, возможно, этот system-socket-proxyd настолько близок, насколько мы можем на данный момент.   -  person Markus Hallmann    schedule 07.06.2015


Ответы (2)


Короче, нельзя.

Но если вы хотите найти решение, вам сначала нужно запустить такой инструмент, как CoreOS или geard, который запускает каждый контейнер Docker в службе systemd.

Даже тогда поддержка Docker наследования сокета пришла и ушла. Я знаю, что geard работает над стабильной поддержкой. CoreOS опубликовала общую поддержку для активации сокетов в Go. Ребята из Red Hat также добавили в соответствующие патчи для пакетов Fedora Docker, использующих активацию сокета Go. библиотеки и улучшите "режим переднего плана", ключевой компонент в его работе.

(Я Дэвид Штраус из ранней статьи Леннарта об активации контейнеров через сокеты, и эта тема интересует Я написал автору патча в Red Hat и связался с командой geard. Я постараюсь обновлять этот ответ.)

person David Timothy Strauss    schedule 04.09.2014
comment
На самом деле после видео читаю статью :) Я использую CoreOS. Но даже если Docker находится в systemd, я никогда не видел ни одного с активацией сокета. Спасибо за ответ, много ссылок на все обсуждения :) Мне нужно сделать несколько тестов, но я почти уверен, что это выполнимо. Буду держать вас в курсе :) - person Pierre Ozoux; 04.09.2014
comment
Ключ - это возможность указать прослушиватель сокета в контейнере, унаследованный от systemd. Я еще не видел стабильной реализации этого. - person David Timothy Strauss; 04.09.2014
comment
Скоро :) github.com/coreos/rocket/issues/106 не с Docker хотя :) - person Pierre Ozoux; 09.02.2015
comment
Разработчики @PierreOzoux Rocket (команда CoreOS) уже давно являются замечательными членами сообщества systemd и основными участниками проекта. - person David Timothy Strauss; 11.02.2015

Если необходимо использовать systemd, в прошлом месяце было сообщение в блоге об этом, здесь (сам еще не пробовал).

Если выбор технологии не является жестким ограничением, вы можете просто написать небольшой прокси на своем любимом языке программирования и просто сделать вызов API Docker, чтобы убедиться, что контейнер запущен. Вот так snickers (мой экспериментальный) прокси-сервер делает Это.

person michielbdejong    schedule 05.04.2015