Ein Docker-Image ist in mehrere Ebenen organisiert, bei denen jede Ebene eine Menge von Unterschieden oder Änderungen gegenüber der vorherigen repräsentiert. Jede Ebene wird dabei nur einmal gespeichert und kann von mehreren Images gemeinsam genutzt werden.
Im Allgemeinen basiert jedes Docker-Image auf einem Basis-Image, das normalerweise ein minimales Betriebssystem wie Ubuntu oder Alpine Linux darstellt. Auf dieser Basis werden zusätzliche Ebenen erstellt, die weitere Software oder Konfigurationen hinzufügen, zum Beispiel einen Webserver oder eine Datenbank.
Die einzelnen Ebenen werden durch sogenannte Read-Only Layers dargestellt. Jeder dieser Layers stellt die Änderungen dar, die durch einen Dockerfile-Befehl erstellt wurden. Diese Schichten werden übereinander gestapelt, wobei die oberste Ebene die sogenannte “writable layer” ist, in der laufende Container Änderungen vornehmen.
Diese mehrschichtige Architektur ermöglicht es, Speicherplatz effizient zu nutzen und Images schnell zu erstellen und zu verteilen, da bei Änderungen nur die aktualisierten Ebenen übertragen werden müssen. Zudem erzeugen Docker-Befehle wie RUN, COPY und ADD jeweils eine neue Ebene im Image.