You often read that Docker images consist of layers. But what are those layers anyway? TL;DR Each layer is an image itself, just one without a human-assigned tag. They have auto-generated IDs though. Each layer stores the changes compared to the image it’s based on. An image can consist of a single layer (that’s often the case when the squash command was used). Each instruction in a Dockerfile results in a layer.