Publickey新野淳一のIT羅針盤

注目を浴びる「Dockerコンテナ」、従来の仮想化と何が違うのか?

2016年は、コンテナ型仮想化として知られる「Docker」がエンタープライズにも本格的に普及する年となるでしょう。とくにDocker対応を果たした「Windows Server 2016」の登場は、多くの環境でDockerを身近な技術にするはずです。果たして、Dockerとはどのような技術であり、どのような利点をもたらすのでしょうか。

Dockerはコンテナ型仮想化の1つである

「Docker」への注目度が昨年から急速に高まっています。

 

Dockerはすでに、「Red Hat Enterprise Linux 7」など主要なLinux最新版でサポートが開始されているだけでなく、「Amazon Web Services(AWS)」「Google Cloud Platform」などのパブリッククラウド、「vSphere」「OpenStack」「Cloud Foundry」といった主要なクラウド基盤ソフトでも対応が開始されているか、あるいは対応が予定されています。

 

そして、マイクロソフトから今年登場が予定されている「Windows Server 2016」の主な新機能の1つがDocker対応です。WindowsにおけるDockerサポートにより、事実上、ほぼすべてのエンタープライズITの環境でDockerが使えるようになります。

 

そのDockerとはどのような技術なのでしょうか? Dockerはコンテナ型仮想化と呼ばれる技術の実装の1つです。

 

いまよく使われているサーバー仮想化は、物理サーバーの上に仮想的なサーバー「仮想サーバー」を複数作り出すことができます。この仮想サーバーはまるで本物のサーバーと同じように振る舞います。

 

仮想サーバーを実現するには、ハードウェアの機能をすべてソフトウェアで実装するという高度な仕組みが必要です。最近では仮想化機能を支援する機能がサーバーに組み込まれてきているとはいえ、その実装はいまだ複雑なものになっています。

 

一方、コンテナ型仮想化はOSの上に“コンテナ”と呼ばれる仮想的なユーザー空間を提供します。ユーザー空間とは、ユーザーがアプリケーションを実行するための、ひと揃いのリソースが提供される空間です。通常は1つのOSの上に1つのユーザー空間があるのですが、コンテナ型仮想化では1つのOSの上で仮想的なユーザー空間であるコンテナを複数提供できます。

 

 

図1 一般的な「サーバー仮想化」とDockerによる「コンテナ型仮想化」の違い

 

図1 一般的な「サーバー仮想化」とDockerによる「コンテナ型仮想化」の違い  

 

OSのユーザー空間を切り出して提供するコンテナは、ソフトウェアでハードウェアと同じものを作り出そうとするサーバー仮想化に比べると、ずっとシンプルで効率の良い実装ができます。

 

こうした効率性や仕組みの違いにより、一般にサーバー仮想化では、仮想サーバーが生成されてOSが起動し利用できるようになるまで分単位の待ち時間が発生しますが、コンテナ型仮想化ではコンテナが切り出されて利用可能になるまでの待ち時間は秒単位です。この“すぐに使える”という点がコンテナ型仮想化、すなわちDockerの大きな利点の1つだと言えるでしょう。

 

Dockerファイルによるコンテナ内容の記述

Dockerにはもう1つ、コンテナの内容を「Dockerファイル」と呼ばれるコードとして記述できる仕組みを備えています。これによりコンテナ内のOSやライブラリ、環境変数といった内容をパッケージングしたり、保存したり、移動させたりといったことが可能です(Dockerファイルのほかに、中身をそのままバイナリファイル化したDockerイメージもあります)。

 

Dockerを使えば、例えば手元のノートPCで開発したアプリケーションを、そのままサーバーへ展開して実行することも簡単にできます。

 

また、Docker社はこの仕組みを利用し、さまざまなミドルウェアやアプリケーションがインストール済みのDockerファイルを多数登録した「Docker Hub」というサービスを提供しています。

 

Docker Hubには、WordPress、MySQL、MongoDB、Node.jsなど、さまざまなアプリケーションのオフィシャルイメージが登録されており、利用者はDocker Hubにアクセスすることで、自分でOSやミドルウェア、アプリケーションをインストールすることなく、すぐに利用できる環境を手に入れることができます。

 

 

さまざまなアプリケーションのオフィシャルイメージが登録されているサービスサイト「Docker Hub」

 

図2 さまざまなアプリケーションのオフィシャルイメージが登録されているサービスサイト「Docker Hub」

https://hub.docker.com/  

 

もちろんサーバー仮想化にも、仮想マシンのイメージをまるごとファイルに落として移動する仕組みを備えていますが、Dockerはそれをずっと容易かつ俊敏に実現してくれるのです。

 

Dockerのデメリットとは?

多数のメリットがあるDockerですが、一方でデメリットもあります。1つは、サーバー仮想化では仮想サーバーごとにOSが選択できるのに対して、コンテナ型仮想化はその構造上、すべてのコンテナで同一のOS(カーネル)を利用することが前提であり、個別には選択できないことです。

 

またコンテナ型仮想化は、サーバー型仮想化に比べて分離レベルが低い、という面もあります。この点はセキュリティに厳しいエンタープライズでの利用にマイナスとなりますが、このデメリットを解消するためにコンテナの分離レベルを高めた実装として、マイクロソフトからは「Hyper-V Container」、VMwareからは「vSphere Integrated Container」などが登場しています。

 

これらは仮想化サーバーで使われているハイパーバイザーの技術をコンテナに応用したものです。今後はこうした技術がコンテナに普及し、分離レベルでの懸念は払拭されていくことになると予想されます。

 

Dockerはサーバー仮想化以上に広く普及へ

迅速に新しいコンテナの提供が行われ、コンテナを簡単にパッケージングして移動できるという2つの大きな特長を備えるDockerは、どのようにエンタープライズ環境へ取り入れられていくのでしょうか。

 

現時点でDockerがもっとも利用されているのは開発環境です。先端的な技術に敏感な技術者が、Dockerの便利さや機能をいち早く理解して、開発環境やテスト環境の迅速な整備や展開に取り入れています。

 

この開発環境やテスト環境で使われているDockerコンテナの環境を、そのまま本番環境にまで展開できるようになると、これまでより頻繁にアプリケーションのバージョンアップが可能になるとともに、開発環境と実行環境の微妙な違いによる動作の不具合などの問題も解決できるようになります。

 

開発から運用までをシームレスかつ協調的に行い、顧客からのフィードバックを迅速にアプリケーションの開発に反映するという動きは、いわゆる「DevOps」と呼ばれます。軽量かつ迅速なDockerは、このDevOpsを実現するうえで欠かせない技術になるとみられています。その後、本番運用環境でのDockerの利用も広がっていくことでしょう。

 

冒頭に書いたように、いまや主要なOSやクラウドのほとんどがDockerに対応しつつあります。ハイパーバイザーと呼ばれる専用のソフトウェアを必要とする仮想サーバーと比べると、DockerはOSの基本機能として組み込まれていくため、ずっと気軽に利用できます。Dockerあるいはコンテナ型仮想化は、現在のサーバー仮想化よりも身近かつ便利な存在として広く普及することでしょう。

 

※このコラムは不定期連載です。

※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。

 

新野淳一

新野淳一/Junichi Niino

ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者

IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。

 

掲載製品の特長・仕様はこちらから