Docker in Docker. The working solution
Nowadays, containerised solutions are extremely widespread and Docker has firmly occupied the leader place among them. Often, the necessity to keep all the generated files and intermediary containers in one single place and clean the cache every time the parent container was stopped. To acheive this goal, developers used to manually or by scripting clean all the garbage with
docker image purge -a and
docker container purge. When you need to perform these operations quite often and especially when you need to clean up not everything, but only some images and containers linked with some other one, you might think about coming up with some scritable solution. But these home-made solutions often come with a gotcha -- they are error prone and accidentally you can delete conteiner wihci wsn't supposed to be deleted with all its data. To keep all the intermediary containers together and delete them at once, you can employ Docker-in-Docker (dind) solution.
📺 Video Guide
🚀 Quick Start
Run dockerized Docker container:
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.
Run child container:
docker run <docker-image>
Your run container just like you do this on your host machine, some limitations may apply though (see note below)
ℹ️Note: Bind mounting directories isn't suported at the moment.
Repeat step 2 as many times as you need.