Докер в Докере. Рабочее решение
https://github.com/alekslitvinenk/dind
https://hub.docker.com/r/alekslitvinenk/dind
В настоящее время контейнеризированые решения стали стандартом де-факто для запуска многих серверных приложений и Докер является одним лидирующих провайдеров. Во время разработки приложений часто возникает необходимость хранить все артефакты и промежуточные контейнеры в одном месте и легко удалять все эти артефакты, когда контейнер с главным приложением был остановлен. Чтобы достичь этой цели, разработчики привыкли использовать команды docker image prune -a
and docker container prune
. Однако, данный подход таит в себе множество недостатков: в первую очередь, чтобы точно настраивать список удаляемых контейнеров, придется прибегать в написанию сложных шелл-скриптов и риск удалить контейнер с нужными данными очень велик. Чтобы более эффективно управлять промежуточными контейнерами, возникла идея запускать их внутри другого контейнера. Так родился проект DinD.
-
Запустите образ DinD:
docker run --privileged -it \ -p <hostPort-1>:<containerPort-1> \ ... -p <hostPort-n>:<containerPort-n> \ alekslitvinenk/dind
ℹ️ Note: Make sure to bind all ports your child containers might need.
-
Запустите дочерний контейнер внутри DinD:
docker run <docker-image>
Запускайте дочерние контейнеры точно так же как вы делаете это обычно, правда есть несколько ограничений (смотрите ниже)
ℹ️ Note: Монтирование директорий для дочерних контейнеров пока не поддерживается. -
Повторите шаг 2 столько раз сколько вам нужно.