CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
最近、「Docker」の話題をよく耳にするようになりました。Dockerは、Linuxコンテナ(LXC)を活用するためのツールで、コンテナ内部で動かすアプリケーション環境の管理が簡単になります。ただし、Dockerを利用してコンテナを使っていると、手軽で便利な反面、コンテナそのものの技術的な本質が見えにくくなることもあります。
そこで、今回は、Linuxコンテナの技術的な特徴をあらためて整理してみたいと思います。Linuxコンテナの基礎を理解することは、Dockerをより高度に使いこなす上でも大切です。すでにDockerを活用している方も、これから試してみようという方も、Linuxコンテナがどのように実現されているのか、その内部の仕組みをぜひ理解しておいてください。
図1は、いわゆるサーバ仮想化技術の分類です。いくつかのパターンがありますが、基本的には、仮想化ハイパーバイザの機能によって、「仮想マシン」、すなわち、仮想的な「物理マシン」を作りだします。仮想マシン内部では、それぞれに異なる、独立したOSが実行されます。
図1 サーバ仮想化技術の分類
一方、Linuxコンテナの場合、サーバ上で稼働するOSは、あくまで1つです。一般にOSの内部は、物理リソースを管理する「カーネル空間」とユーザプロセス(アプリケーション)を実行する「ユーザ空間」に分かれます。コンテナ型の仮想化では、ユーザ空間を複数に分けて、それぞれのユーザプロセスから見えるリソースを制限します(図2)。このように、いくつかのユーザプロセスをまとめて閉じ込めたユーザ空間が「コンテナ」に他なりません。
図2 コンテナ型仮想化技術
コンテナごとに分割されるリソースには、次のようなものがあります。
図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/
筆者書籍紹介 Software Design plusシリーズ 「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 本物の基礎を学ぶ!新定番のLinux独習書 中井悦司 著 B5変形判/384ページ 定価3,129円(本体2,980円) ISBN 978-4-7741-5937-9 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes