IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第69回 Dockerのoverlayfsドライバーによる性能向上 (中井悦司) 2015年6月

はじめに

 前回のコラムでは、Dockerのストレージバックエンドの性能比較として、1000個のコンテナーを起動/停止するベンチマークの結果を紹介しました。その中で、オーバーレイ型のファイルシステムを利用した、overlayfsドライバーの性能が優れていることがわかりました。今回は、このoverlayfsドライバーについて解説したいと思います。

overlayfsの仕組み

 overlayfsは、2014年の年末に公開されたLinuxカーネル3.18で正式採用されており、Linuxの標準機能として利用することができます。たとえば、Fedora22では、標準でoverlayfsが利用可能になっています(*1)。

 overlayfsは、「Lowerレイヤー」と呼ばれる既存のディレクトリーの上に、「Upperレイヤー」と呼ばれる新しいディレクトリーを被せた状態で、ファイルシステムをマウントする機能を提供します。次は、「/old」ディレクトリーに「/upper」ディレクトリーを被せて、「/new」ディレクトリーにマウントする例になります。「/work」は、overlayfsが内部的に使用する作業用ディレクトリーです。

# mount -t overlay overlay -o upperdir=/upper,lowerdir=/old,workdir=/work /new

 /newの中を見ると/old同じ内容が見えますが、/newに書き込んだ内容は、上に被せた/upperの方に保存されます。つまり、既存のディレクトリーに透明なビニールシートを被せて読み書きしているようなもので、既存のディレクトリーの内容を破壊することなく、自由に読み書きすることが可能になります。この時、1つのLowerレイヤーに対して、異なるUpperレイヤーを用いて、複数のマウントポイントにマウントすることも可能です。これは、Lowerレイヤーのディレクトリーについて、複数のスナップショットコピーを作成して、同時に読み書きするような使い方になります。

Dockerのoverlayfsドライバー

 Dockerでoverlayfsドライバーを利用すると、ローカルにダウンロードしたDockerイメージは、それぞれ、ディレクトリー「/var/lib/docker/overlay/<イメージID>/root」の下に展開されます。この時、ベースイメージから派生したイメージの場合、ベースイメージに含まれるファイルについては、ベースイメージのディレクトリーにあるファイルへのハードリンクを使用することで、ディスク使用量を削減します。

 そして、ローカルにあるイメージを指定してコンテナーを起動すると、コンテナーに割り当てるファイルシステムは、overlayfsの機能で用意されます。はじめに、指定のイメージを含むディレクトリーをLowerレイヤーとして、コンテナー用のUpperレイヤーを被せてホストLinux上にマウントします。その後、該当のマウントポイントをコンテナーのルートファイルシステムとして割り当てます。同一のイメージから複数のコンテナーを起動する場合は、それぞれのコンテナーに対して、別々のUpperレイヤーが用意されますが、Lowerレイヤーのディレクトリーは同じものを共有する形になります(図1)。

fig01

図1 同一のDockerイメージから複数のコンテナーを起動する様子

 それでは、このような仕組みを用いると、なぜ性能が向上するのでしょうか? これは、ディスクキャッシュの使い方にヒントがあります。同じイメージから複数のコンテナーを起動する場合、Lowerレイヤーに含まれるファイルは、ホストLinux上では同一のファイルになります。そのため、どれか1つのコンテナーからアクセスが発生して、ホストLinuxのディスクキャッシュに読み込まれると、他のコンテナーからアクセスする際は、ディスクキャッシュ上のデータが再利用されます。これにより、物理ディスクへのアクセス回数が減少して、多数のコンテナーが高速に起動するということになります。

 異なるイメージからコンテナーを起動する場合でも、それらのイメージが共通のベースイメージを持っている場合は、同じ効果が得られます。前述のように、ベースイメージに含まれるファイルは、ハードリンクで共有されていますので、やはり、ディスクキャッシュ上のデータが再利用されることになるからです。

 Fedora22では、実際に、Dockerにoverlayfsドライバーを組み合わせて利用することが可能になっています。動作の様子を確認したい方は、参考資料を参照してください(*1)。

次回予告

 来週は、久しぶりに、OpenStack関連のイベントに参加します。私からは、以前のコラムで紹介した、VXLANについてお話をする予定です。次回は、こちらのイベントからの情報をお伝えしたいと思います。

参考資料

*1Fedora22でoverlayfsを使う手順

*2Fedora22のDockerでoverlayfsドライバーを利用する手順

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes