Dockerfile の各命令がレイヤーとして積み重なる仕組みを、ステップごとに可視化します。
Docker イメージは、コンテナを作成するための読み取り専用のテンプレートです。 アプリケーションのコード、ランタイム、ライブラリ、環境変数、設定ファイルなど、アプリを動かすために必要なものがすべてパッケージ化されています。
たとえるなら、冷凍食品のようなものです。 Dockerfile は「レシピ(作り方)」、docker build は「調理・パッケージング」、 完成したイメージは「冷凍された状態」、そして docker run は「電子レンジで温める(起動する)」に相当します。
Dockerfile の各命令(FROM, RUN, COPY など)が1つのレイヤーとして積み重なり、イメージを構成します。 一度作成されたレイヤーはイミュータブル(変更不可)であり、再利用可能です。
Docker Hub、 Amazon ECR、 GitHub Container Registry などのレジストリに push/pull できます。lowerdir が読み取り専用レイヤー、upperdir が書き込みレイヤーです。docker build 時に、Dockerfile の命令とコンテキスト(コピーするファイル等)が前回と同一であれば、そのレイヤーはキャッシュから再利用されます。 あるレイヤーが変更されると、それ以降のすべてのレイヤーもキャッシュが無効化されます(キャッシュバスティング)。docker manifest inspect で確認できます。 マルチアーキテクチャイメージ(amd64/arm64)では、マニフェストリストが各アーキテクチャ用のマニフェストを指し示します。sha256:a1b2c3d4...)。 内容が同一なら同じダイジェストになるため、コンテンツアドレッシングで重複を排除できます。 レジストリとの通信でもダイジェストが使われ、改ざん検知にも役立ちます。FROM node:20-alpine はビルドの出発点です。 Docker Hub などのレジストリからベースイメージをプルし、最初のレイヤーとして配置します。 このレイヤーには OS のファイルシステム(Alpine Linux)とランタイム(Node.js)が含まれています。FROM scratch を使えば、完全にゼロからイメージを構築することも可能です。RUN はコマンドを実行し、結果の差分をレイヤーとして保存します。 COPY はホストのファイルをイメージにコピーします。 どちらも前のレイヤーからの差分だけが新しいレイヤーに記録されます。 1つの RUN で複数コマンドを && でつなぐと、レイヤー数を減らせます。docker run でコンテナを起動すると、イメージの読み取り専用レイヤーの上に薄い書き込みレイヤー(container layer)が1つ追加されます。 コンテナ内でのファイル変更(作成・編集・削除)はすべてこのレイヤーに記録されます。Copy-on-Write により、変更するファイルだけがコピーされるため効率的です。 コンテナを削除すると、この書き込みレイヤーも一緒に削除されます。node:20-alpine を使う10個のコンテナがあっても、ベースレイヤーの 126MB はディスクに1回だけ保存されます。 各コンテナが独自に持つのは書き込みレイヤーだけです。これにより、起動も高速になります(レイヤーのダウンロードが不要)。
Dockerfileの各命令でレイヤーキャッシュがヒット/ミスする仕組みを可視化。命令の順番がビルド速度に与える影響を理解できます

複数ステージで最終イメージを劇的に軽量化する仕組みを可視化

Docker コンテナの状態遷移(create → start → running → stop → remove)をステップで可視化します

Volume・Bind Mount・tmpfsの3方式の仕組みとコンテナ削除時のデータの行方を可視化

マルチコンテナ構成の起動・通信・停止の仕組みを可視化

イメージのpush/pullとレイヤー単位の転送の仕組みを可視化