Dockerイメージの差分管理
最近,研究室内の勉強会で調べる機会があったのでメモメモ...
12/6 に追記
イメージは差分の集まり
Dockerのイメージは複数のレイヤが重なって構成されています.
レイヤとは docker run
でコンテナを立ち上げてから docker commit
でイメージ化するまでの間に発生したファイルの差分にあたります.
こちらのようにDebianのベースイメージを元に
- A というものを追加した
- B というものを追加した
という差分が重なることでイメージが構成されます.
差分の管理方法
Docker はAUFSというファイルシステムを使っているらしい...
ディストリビューションの標準ストレージ・ドライバを使うそうです。Docker をインストールする時, システム上の設定に応じてデフォルトのストレージ・ドライバを選択します.
AUFSはLinuxのライブCDに使われています.ライブCDって,ハードディスクに書き込みできないのにファイルを保存できたりします.それはAUFSが下記の動きをしてくれているためです。
- CD-ROMのOS部分をRead-Onlyとする.また,メモリ上にWritableな領域を確保.
- ファイルシステムに変更があったら,メモリ上に差分だけを書き込む.
- 結果,Read-Only領域(元の状態)にWriable領域(差分)を重ねるとディスクに書き込んだのと同じ状態になる.
よって,先ほどの図は
Debian~add BがRead-Onlyな領域、一番上のレイヤがWritableな領域となる.
今の状態で docker commit
すると,一番上のレイヤも含めてRead-Only化されたイメージができあがり, また、作られたイメージを元に docker run
すると,新しく一番上にWritableなレイヤが作られる仕組み.
とりあえず,こんな感じ
あとは実際に見てみると良いかも...