Dockerイメージのレイヤリング方法
DockerイメージのレイヤーはUnionファイルシステム(UnionFS)を使用して実現されます。
UnionFSは複数の異なるファイルシステム(ブランチと呼ばれる)を1つのファイルシステムへと統合することができる軽量ファイルシステムである。DockerイメージはユニオンFSによって複数の読み取り専用層(イメージレイヤーと呼ばれる)を統合して、読み書き可能なコンテナを構築する。
Dockerイメージのレイヤリングの仕組みは次のとおりです。
- 各イメージレイヤーはすべて読み取り専用で、1 つ以上のファイルまたはディレクトリが含まれています。
- 各イメージレイヤーには、イメージレイヤーIDという一意のIDがあります。
- Dockerが新しいイメージを作成する際には、既存のイメージ層の上に新しい読み書き可能な層(コンテナ層)を追加します。コンテナ層には、インストールされたパッケージや変更されたファイルなど、コンテナ内の書き込み可能な内容が格納されます。
- コンテナ起動時に Docker は読み込み専用イメージ層と書き込み可能なコンテナ層をマウントして完全なファイルシステムを構成する。読み込み専用イメージ層は基本的な OS やアプリケーションファイルを提供し、書き込み可能なコンテナ層はコンテナ固有のカスタマイズやデータを保持する。
- コンテナが読み取り専用ファイルを変更する場合、Dockerはそれを書き込み可能なコンテナレイヤーにコピーしてそこで変更を加え、元の読み取り専用イメージレイヤーには影響を与えません。
- 階層構造により、Dockerイメージは共有の読み取り専用イメージレイヤーを利用でき、結果として保存領域の使用量が削減されます。
Dockerはイメージを重ねることでイメージの再利用と共有を実現し、イメージの効率と保守性を向上させています。