Обычно вы этого не делаете.Для этого есть две веские причины: если вы безоговорочно запускаете контейнер для каждого запроса, становится очень легко перегрузить вашу систему этими фоновыми заданиями до такой степени, что ни один из них не сможет развиваться;а установка, которая позволит вам запускать больше контейнеров Docker, также предоставит вам неограниченный доступ к хосту на уровне root, который вам не нужен в процессе, который принимает сетевые запросы.
Лучший подход - этонастроить систему очереди заданий. RabbitMQ является популярным и открытым исходным кодом, но ни в коем случае не единственным вариантом.Когда вы получаете запрос, требующий фоновой работы, вы добавляете задание в очередь и немедленно возвращаетесь.Между тем, у вас есть некоторое количество рабочих процессов, которые принимают задания из очереди и выполняют работу.
Это дает вам несколько преимуществ.Вы контролируете, сколько работы можно выполнить параллельно (контролируя количество рабочих контейнеров).Если вам нужно проделать дополнительную работу, настроив второй сервер (или даже больше), все они могут подключиться обратно к одному и тому же серверу очереди, не требуя сложной настройки контейнера с несколькими узлами.Если ваши рабочие потерпят крах (или будут убиты OOM), их рабочие места будут возвращены в очередь и могут быть забраны и повторены другими работниками.Если вы решили, что Docker вам не подходит, или вам нужен другой оркестратор (Nomad, Kubernetes), вы можете запустить точно такую же настройку, не внося никаких изменений в код, просто изменив конфигурацию развертывания.