Как вы можете написать демона докеров, который может при необходимости запускать другие контейнеры докеров?

Я видел несколько вариантов того, как контейнер докеров может напрямую связываться с его хост-системой, но все они кажутся вроде подлый. Например, похоже, что можно запустить контейнер и связать (используя -v) исполняемый файл-док-станцию ​​в исполняемом файле докеры хоста. Можно отправлять сообщения на хост с помощью сетевого протокола. Также кажется, что флаг -privilege также может помочь.

Кажется, что каждый из этих методов имеет недостатки и проблемы безопасности. Мой большой вопрос в том, что эта архитектура – даже лучший подход.

Наша цель – запустить процесс демонстрации докеров, опросив базу данных, используемую в качестве очереди. (Я знаю, что это в какой-то мере недооценивается, но наш трафик очень низкий и внутренний. Производительность для такого типа очереди не является проблемой.) Когда демон docker обнаруживает, что нужно выполнить работу, он запускает другой контейнер докеров для обработки этой работы. Этот контейнер умирает, когда он закончен. Каждый контейнер принадлежит «системе» и будет запускать нагрузку на эту систему. Каждая система может иметь только одну нагрузку на контейнер.

Это парадигма, которая имеет смысл? Будет ли демона лучше, чем просто процесс на уровне хозяина? Например, скрипт Python вместо контейнера докеров? Предполагается ли, что Docker используется таким образом? Я просто отсутствую, где, в документации Docker, он рассказывает мне, как это сделать? Являются ли мои «подлые» идеи выше не столь хитрыми, в конце концов?

Я понимаю, что здесь есть возможность высказаться. Я ищу некоторые краткие рекомендации.

Заранее спасибо!

Наиболее предпочтительным решением, которое я видел больше всего, является установка двоичных файлов докеров в контейнер, а затем монтирование /var/run/docker.sock в контейнер. Файл Dockerfile, который у меня есть для чего-то похожего, выглядит так:

FROM upsteam:latest ARG DOCKER_GID=999 USER root # install docker RUN curl -sSL https://get.docker.com/ | sh # app setup goes here # configure user with access to docker RUN groupmod -g ${DOCKER_GID} docker && \ usermod -aG docker appuser USER appuser 

И затем он запускается с:

 docker run -d --name myapp -v /var/run/docker.sock:/var/run/docker.sock myapp 

Это было бы самым эффективным решением, поскольку вы удаляете пропускную способность сети. И он удаляет любые сетевые уязвимости, либо из открытого порта, либо из-за включения сертификата TLS внутри вашего контейнера, который может случайно протечь с чем-то вроде потерянной резервной копии.