Camada de imagem
Uma imagem de container é construída a partir de camadas empilhadas e imutáveis — cada uma é a diferença (diff) que uma etapa do build acrescentou. As camadas são cacheadas e compartilhadas entre imagens, o que torna o build e a distribuição rápidos e econômicos em espaço.
Mecânica: cada instrução de um Dockerfile (RUN, COPY etc.) normalmente cria uma nova camada sobre a anterior; em tempo de execução, todas são empilhadas por um union filesystem (overlayfs) num sistema de arquivos coerente, com uma camada gravável no topo para o container. Consequências para a otimização: cache — camadas inalteradas não são reconstruídas (coloque o que muda pouco, como a instalação de dependências, no início do Dockerfile e o código por último, para aproveitar melhor o cache); compartilhamento — várias imagens com a mesma camada-base a dividem em disco e no download (baixa-se só o que falta). Armadilha: um segredo colocado numa camada continua no histórico mesmo que uma camada posterior o "remova" → use multi-stage builds. Fundamental para entender o tamanho das imagens e o desempenho do build. Relacionado a multi-stage build e overlayfs.