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

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

研修コース検索

コラム

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

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第41回 Linuxコンテナ(LXC)の基礎をまとめ直す (中井悦司) 2014年4月

はじめに

 最近、「Docker」の話題をよく耳にするようになりました。Dockerは、Linuxコンテナ(LXC)を活用するためのツールで、コンテナ内部で動かすアプリケーション環境の管理が簡単になります。ただし、Dockerを利用してコンテナを使っていると、手軽で便利な反面、コンテナそのものの技術的な本質が見えにくくなることもあります。
 そこで、今回は、Linuxコンテナの技術的な特徴をあらためて整理してみたいと思います。Linuxコンテナの基礎を理解することは、Dockerをより高度に使いこなす上でも大切です。すでにDockerを活用している方も、これから試してみようという方も、Linuxコンテナがどのように実現されているのか、その内部の仕組みをぜひ理解しておいてください。

サーバ仮想化とコンテナの違い

 図1は、いわゆるサーバ仮想化技術の分類です。いくつかのパターンがありますが、基本的には、仮想化ハイパーバイザの機能によって、「仮想マシン」、すなわち、仮想的な「物理マシン」を作りだします。仮想マシン内部では、それぞれに異なる、独立したOSが実行されます。

fig01

図1 サーバ仮想化技術の分類

 一方、Linuxコンテナの場合、サーバ上で稼働するOSは、あくまで1つです。一般にOSの内部は、物理リソースを管理する「カーネル空間」とユーザプロセス(アプリケーション)を実行する「ユーザ空間」に分かれます。コンテナ型の仮想化では、ユーザ空間を複数に分けて、それぞれのユーザプロセスから見えるリソースを制限します(図2)。このように、いくつかのユーザプロセスをまとめて閉じ込めたユーザ空間が「コンテナ」に他なりません。

fig02

図2 コンテナ型仮想化技術

 コンテナごとに分割されるリソースには、次のようなものがあります。

  • プロセステーブル:
    コンテナごとに独立したプロセステーブルを用意して、コンテナ内のプロセスからは、他のコンテナのプロセスは見えないようにします。
  • ファイルシステム:
    コンテナごとに特定のディレクトリをルートファイルシステムとして見せます。以前からある「chroot」と同様の考え方です。
  • ネットワーク:
    ネットワークネームスペース(netns)の機能により、コンテナごとに独立したネットワーク設定を行います。「veth」と呼ばれる直結した仮想NICのペアを作る機能を利用して、vethの片側をコンテナ内部のネームスペースに割り当てます(図3)。
  • CPU、メモリ、デバイス(「/dev」以下のデバイスファイル):
    cgroupsの機能により、コンテナから利用できる範囲を制限します。

fig03

図3 vethによる仮想NICの割り当て例

 以上の説明から分かるように、コンテナ内部で動作するのは、あくまで通常のプロセスと同じものです。1つのOS上で複数のプロセスが動作するのは、当たり前とも言えますが、これら複数のプロセスを別々のコンテナに閉じ込めて動作環境を分離する形になります。仮想マシンとは異なり、コンテナ内部でOS一式が動作するというわけではありません。
 もちろん、通常のOS環境で動作するあらゆるプロセスをコンテナ内部で起動すれば、コンテナ内部でOSが動いているように見せかけることは可能です。しかしながら、必要なプロセスだけを選択的に動作させる方が、コンテナの管理はシンプルになります。1台のサーバ上で同じアプリケーションを複数起動して、マルチテナント型のアプリケーションサービスを提供する場合などは、そのアプリケーションに必要なプロセスだけを含む複数のコンテナを起動するような使い方が考えられます。

次回予告

 冒頭で説明したように、Dockerを利用すれば、比較的、手軽にコンテナを活用することができます。一方、コンテナ技術を理解するために、あえて原始的な方法でコンテナを使ってみるならば、libvirtを利用する方法があります。libvirtは、主には、Linux KVMのサーバ仮想化環境を管理する際に使用するツールですが、コンテナの管理にも対応しており、virshコマンドでコンテナの操作が可能です。具体的な手順については、筆者のBlog記事を参考にしてください(*1)。
 さて、来週は、ITmedia主催のOpenStack関連セミナーに登壇する予定です。次回は、こちらのセミナーでの話題をお届けしたいと思います。

参考資料

*1)「RHEL6.2のlibvirtからLinuxコンテナを利用

 

++ 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研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート