SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

軽くて使いやすい仮想化技術 「Docker」の仕組みと
エンタープライズ開発における4つの活用事例


Dockerを支える技術②「Union File System」

 Union File Systemは、複数のレイヤーのファイルシステムをあたかも1つのファイルシステムかのように扱う技術です。親となるファイルシステムに編集可能なレイヤーを重ね、レイヤーを通して透過的に見せる仕組みになっています。また、Linuxディストリビューションによって、異なるファイルシステムの仕組みが利用されています。

 Dockerで使われているUnion File Systemは次の3つです。

  • AUFS
  • Devicemapper
  • VFS

AUFSの仕組み

 その中でも代表的な一つのUnion File Systemの実装であるAUFS(Another Union File System)について説明していきます。次の図をご覧ください。

AUFS
AUFS

 

 AUFSでは、このようにファイルシステムが多層に重なっています。最下層はベースとなる元のイメージです。真ん中の層は一度編集された後、保存された差分を保持しています。これら2つの層は、読み取りのみ可能のファイルシステムで、その上に編集可能な層が重なっています。

 上図において、a~dはAUFS上のファイルを表しています。

  • 「a」は新規に追加されたファイルです。これは編集可能な層に追加されます。
  • 「b」はこれまで一度も編集されていないファイルです。これを参照するときには、最下層上の「b」ファイルを参照します。
  • 「c」は前回編集したファイルで、その際に最下層からコピーされ、差分として真ん中の層に保存されています。したがって、閲覧時は真ん中の層を参照します。
  • 「d」は、今回編集しようとしているファイルです。そのため、編集可能なファイルとして、最下層から最上層にコピーされています。

 このように、a~dのファイルは異なる層に位置していますが、あたかも1つのファイルシステム化のように見せています。それがAUFSの仕組みです。

DockerにおけるAUFS

 DockerではAUFSの仕組みを使って、起動の速さを向上させています。次の図はDockerが起動した状態です。ベースとなるイメージをマウントし、その上に編集可能なファイルシステムの層を重ねています。

DockerにおけるAUFS
DockerにおけるAUFS(出典:Docker Documentation「Layers」)

 

 Dockerのコンテナ上で、ファイルシステムに変更を加えると、最上層の編集可能なファイルシステムに差分が加わります。Dockerにはcommitというコマンドがあり、このコマンドを発行することによって、コンテナに加えられた差分より新しいイメージを作成することができます。次回にコンテナを立ち上げる際には、前回発行したcommitコマンドによって保存されたイメージが、読み取りのみ可能のファイルシステムとなってマウントされる仕組みとなっています。

 保存された読み取りのみ可能なイメージはコンテナ間で共有することができるため、各環境およびプロセスごとに巨大なディスクイメージファイルを持つ必要がありません。したがって、使用するストレージやメモリを節約でき、結果として、起動の速さにも、貢献しています。

次のページ
なぜエンタープライズ開発にDockerを採用したのか

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

遠藤 博樹(エンドウヒロキ)

株式会社ワークスアプリケーションズ Advanced Technology&Engineering Div.所属。製品や社内システムに対するインフラ研究を担当し、製品のクラウド化や開発用システムの分散化など製品の品質向上や開発者の生産性の向上を目的に、インフラからの視点で新しい技術を社内に取...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

秋吉 真衣(アキヨシマイ)

株式会社ワークスアプリケーションズ Advanced Technology&Engineering Div.所属。クラウド運用研究グループにて自社の新サービスである「CCMS」の開発・導入支援を担当。クラウド上での自社製品の運用の汎用化・自動化を進める中で、自動化ツールの開発や周辺技術の調査・検証な...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7894 2014/07/24 16:46

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー