急速に注目度が高まるコンテナ型仮想化とDocker

掲載者:CUPA総合アドバイザー 新野 淳一

クラウドの基盤技術の1つとして広く利用されているのが仮想化の技術です。現在使われている仮想化技術は一般にハイパーバイザを用いて物理マシン上に仮想マシンを作りだすものです。従来のこの仮想化技術に対して、最近急速に注目度を高めているのがコンテナ型仮想化技術です。代表的な実装としてDockerが挙げられます。Dockerの特徴は2つあります。1つは軽量な仮想マシンとして扱えるため従来の仮想マシンよりも起動が非常に速く、手軽に扱いやすいということ。もう1つは、従来の仮想化技術による仮想アプライアンスと同様に、アプリケーションを軽量でポータブルなパッケージとして扱うことができる点です。今月はこのDockerの動向について、見ていきましょう。

Dockerは軽量なVMに見える

下記の図は、DockerのWebサイトに掲載されている仮想マシン(VM)による仮想化技術と、コンテナ型仮想化技術を比較したものです。コンテナ型仮想化技術はOS上(DockerではLinux)に仮想的なユーザー空間を複数作り出すもので、またライブラリなどは共有されています。

20140610_niino_1

Publickeyの記事「今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2」から、Dockerの特徴をまとめると次のようになります。

 コンテナとはハイレベルから見ると軽量VMにみえます。プロセスが隔離されているし、ネットワークも独自に振られていて、リソースも分離されているしrootとして実行できます。
 ディスクにも書き込めますし、ログはすべてstdout/stderr/stdinに出てくるので、普通に見れば軽量VMに見えます。
 一方でコンテナをローレベルから見ると、chrootの強化版です。1コンテナ=1プロセスなので、ホストOSからpsコマンドを叩くとDocker上で動いているプロセスがそのまま見えます。
 カーネルをホストと共有していて、VMでも準仮想化でもなく、エミューレションはありません。また、Linuxのリソース制限のツールcgroupsで、CPUやメモリなどのリソース制限ができます。

コンテナ型仮想化はこのように、従来の仮想マシンよりも軽量なのが大きな特徴です。一方でOS(カーネル)の上で仮想化を実装するため、Dockerでの実装ならOSはLinuxに固定されるなど、OSをあとから選択することはできません。

6月初旬には正式版が登場するか

Dockerは現在のところまだ開発途中の実装ですが、5月7日に最初のRelease Candidate(正式版候補)となる「Docker 0.11」がリリースされました。そして、6月9日と10日の2日間、サンフランシスコでDockerのイベント「DockerCon 2014」が開催予定です。このタイミングでRCが登場したということは、この「DockerCon 2014」の基調講演で正式版となるDocker 1.0を華々しく発表、ということを目論んでいるのではないでしょうか。

Red hatはDockerのための軽量OSを開発中

Red Hatは4月に、Dockerコンテナの運用に最適化した軽量なOS「Red Hat Enterprise Linux Atomic Host」を、今年リリース予定の「Red Hat Enterprise Linux 7」と合わせてリリースすると発表しています。Red Hat Enterprise Linux Atomic Hostは、Red Hat Enterprise Linuxの派生OSであるため、Red Hat Enterprise Linuxと同レベルの信頼性、セキュリティ、使い勝手などを備えつつ、Dockerのコンテナの実行や運用に絞って軽量化することでオーバーヘッドを小さく、さらにパッチなどの運用の手間を小さくするとしています。

20140610_niino_2

Red Hat Summit 2014のセッション「Application-centric packaging with Docker & Linux containers」の資料から

Red Hat Enterprise Linux Atomic Hostの開発は、「Project Atomic」と呼ばれるオープンソースプロジェクトがベースになります。Project Atomicは、CentOS、Fedora、Red Hat Linux横断のプロジェクト。

Red HatはDockerの開発元であるDocker.ioとの協業を深め、両社でコンテナの相互運用性などについて作業していくことも合わせて発表しています。

AWS Elastic BeanstalkがDockerをサポート

同じく4月には、AmazonクラウドでPaaS機能を提供するAWS Elastic BeanstalkがDockerをサポートすると発表されました。「AWS Elastic Beanstalk for Docker」です。DockerコンテナをAWS Beanstalkによってデプロイ、監視し、ロードバランサーを使って、正常に稼働しているインスタンスにリクエストを分散、スケーラブルな運用を実現してくれます。

Google Compute EngineがDockerを積極対応へ

5月26日、Google Compute Engineは、Dockerに最適化されたOSイメージをオープンプレビュー版として提供開始しました。また、Dockerのために開発されているCoreOSの正式にサポートを開始しました。ドキュメント「Containers on Google Cloud Platform」によると、Google Compute Engineで提供されるようになった「Container-optimized Google Compute Engine images」、コンテナ最適化イメージは、主に以下の3つから構成されています。

• Debian 7
• Dockerランタイム
• コンテナ管理用のメタデータフレームワーク

Google Cloud Platform担当のシニアスタッフソフトウェアエンジニア Joe Beda氏が公開しているスライド「Containers At Scale」によると、メタデータとはyamlファイルでコンテナイメージなどを指定し、これをノードごとのコンテナマネージャが読み込んでDockerを管理することになるようです。

20140610_niino_3

さらに今後、ユーザーインターフェイスで操作できるようにすることと、ロギング機能、動的なシステム構築のための基本機能などが提供される予定と説明されています。

Docker開発元がCloud Foundry Foundationに参加表明

5月30日、コンテナ型仮想化ソフトウェア「Docker」の開発元であるDockerは、オープンソースのPaaS基盤ソフトウェアである「Cloud Foundry」の開発団体となる「Cloud Foundry Foundation」へ参加することを発表しました。Cloud Foundryは現在Pivotalが管理しており、Cloud Foundry Foundationは来月にもPivotalから移管を受けて発足予定です。Cloud Foundryの内部では、アプリケーションの実行基盤として独自のコンテナ技術である「Warden」(ウォードン)が使われており、基本的にはDockerはサポートされていません。ただし、すでにCloud FoundryでDockerをサポートするActiveStateのStackatoなどの実装が存在しており、またCloud Foundryの内部で次期アプリケーション実行基盤となるべく開発されているDiegoでは、Warden以外の技術にも対応しやすい構造になる見通しです。そして来月、6月9日にはサンフランシスコでDockerのイベント「DockerCon」と、Cloud Foundryのイベント「Cloud Foundry Summit Sunfrancisco」が歩いて10分ほどの距離で同時に開催されます。Dockerはバージョン1.0の発表を行い、正式版となるはずです。同時にCloud Foundry対応の発表が行われる可能性は高いでしょう。Cloud FoundryのようなPaaSがDockerに対応することで、あらかじめPaaSが提供しているRubyやJavaといった実行系やフレームワークだけでなく、ユーザー自身で実行環境をPaaSに乗せることができるため、PaaSの可能性が大きく広がります。すでにAmazonクラウドのElastic BeanstalkやレッドハットのOpenShiftなど、いくつかのPaaSがDocker対応を行っており、またGoogle Compute Engineでも対応が発表されました。いまのDockerの注目度からすれば、今後さらに対応プラットフォームは広がるでしょう。

すでにGoogleは全部のソフトウェアをコンテナに乗せている

このように、急速に注目され対応が広がるDockerですが、すでにGoogleではすべてをコンテナ型仮想化の上で運用しているという驚くべき発表が行われています。Google Cloud Platform担当のシニアスタッフソフトウェアエンジニア Joe Beda氏が公開したスライド「Containers At Scale」には、「Everything at Google runs in a container」(Googleでは全部をコンテナで実行している)と説明するページがあります。Everythingがわざわざ太字で強調されています。

20140610_niino_4

つまり私たちが利用するGoogleのすべてのサービスも、Googleの社内で使われているツールもすべて、すでにGoogleではDockerのようなコンテナ型仮想化技術の上で実行されているということのようです。「We start over 2billion containers per week.」(私たちは毎週20億個以上のコンテナを起動している)とも書いてあり、Google内部ではすさまじい数のコンテナが実稼働していることになります。Googleがクラウドの技術において私たちに数年先行しているのだとすれば、数年後のクラウドではコンテナ型仮想化がインフラに組み込まれていることが当たり前になっているのかもしれません。