Всем привет!



Бывают случаи, когда необходимо создать контейнер из другого контейнера (runner в CI, сбор дополнительных метрик). Как это можно сделать?



Есть несколько основных «стратегий»:

🍭 Docker in Docker, DinD – официальный образ, который позволяет запускать контейнер внутри контейнера we need to go deeper. Нюанс – ему требуется –privileged

🍭 Docker out of Docker, DooD – реализуется через mount /var/run/docker.sock, что позволяет использовать docker engine хоста для запуска контейнера «по соседству». Нюанс – можно получить информацию о контейнерах на хосте

🍭 Альтернативные runtime – реализуется при помощи «подмены» runtime, например, на sysbox-runc



Более подробно про это можно почитать в статье. В целом практика, хоть и существует, не является безопасной и рекомендуемой.



А вы используете такие подходы? Если да, то зачем и почему без этого нельзя обойтись?