Docker in Docker. The working solution
https://github.com/alekslitvinenk/dind
https://hub.docker.com/r/alekslitvinenk/dind
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.
-
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.