Skip to content

Tips

To delete all the build caxhe

docker builder prune

To delete all stopped containers, un-used images, build cache

docker system prune

Docker within Docker

https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Do you just want to be able to run Docker (specifically: build, run, sometimes push containers and images) from your CI system, while this CI system itself is in a container? All you want is a solution so that your CI system like Jenkins can start containers.

And the simplest way is to just expose the Docker socket to your CI container, by bind-mounting it with the -v flag.

Simply put, when you start your CI container (Jenkins or other), instead of hacking something together with Docker-in-Docker, start it with:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

Now this container will have access to the Docker socket, and will therefore be able to start containers. Except that instead of starting “child” containers, it will start “sibling” containers.

Try it out, using the docker official image (which contains the Docker binary):

docker run -v /var/run/docker.sock:/var/run/docker.sock -ti docker

This looks like Docker-in-Docker, feels like Docker-in-Docker, but it’s not Docker-in-Docker: when this container will create more containers, those containers will be created in the top-level Docker. You will not experience nesting side effects, and the build cache will be shared across multiple invocations.

To view the all the actions that took place in order to generate the image of a container

docker history

To view the full commands

docker history --format "{{.ID}}: {{.CreatedBy}}" --no-trunc docker