If two Dockerfiles use debain:stretch-slim as their base, docker won't download both base images twice. Each command in the Dockerfile creates an image. If you copy a Dockerfile and just change the last line and build them in order, the 2nd build will run a lot faster and you'll see in the output it pulls out "cached images" since it's already run those commands (docker build --no-cache always forced a full build).
If you start making Dockerfiles and playing around with it, it will start to make more sense.
This project takes an image and shows the list of layers (=commits) and for each layer (=commit) allow you to see what was changed (=the diff).
A bit like a git log for a docker image.