Dockerコンテナと関連技術をやさしく解説 (その1) | 東京エレクトロンデバイス

Publickey新野淳一IT羅針盤

なぜDockerコンテナは注目されるようになったのか?
ーDockerコンテナと関連技術をやさしく解説 (その1)

2013年に「Dockerコンテナ」の技術が登場して、今年で8年目。Dockerコンテナの技術は、ITの基盤技術として当たり前のものになろうとしている。なぜDockerコンテナは注目され、ここまで普及したのだろうか。改めて、その技術と経緯を見てみよう。今回から数回にわたり『Dockerコンテナと関連技術をやさしく解説』を連載する。

そもそもは自社のクラウドを便利に使ってもらうため

「Dockerコンテナ」の技術を開発したのは、現在のDocker社です。なぜ彼らはDockerコンテナ技術を開発するに至ったのでしょうか? その経緯を振り返ることで、Dockerの利点も見えてきます。

Docker社は2010年に創業したクラウドベンダーです。当時の社名は「dotCloud」で、クラウド上でさまざまなアプリケーションを実行する、いわゆるPlatform-as-a-Service(PaaS)型クラウドサービスを、社名と同じ「dotCloud」という名称で提供していました。

その創業者であるSolomon Hykes氏は、自社のクラウドサービスを便利に使ってもらうために、プログラマーが自分のPC上で開発したアプリケーションを簡単にdotCloudへ持ち込んで実行する仕組みがあればいいのではと考えました。そうすれば、プログラマーは自分のPCで開発したものをどんどんクラウドへ持ち込んで使ってくれるはずです。

それがDocker開発の端緒となりました。実際にHykes氏が2013年のイベントでDockerのデモを行った動画『The future of Linux Containers』が、いまもYouTubeで見ることができます。

そして、このデモから数日後、同社はDockerコンテナを正式公開しました。

図版1●Docker社の創業者Solomon Hykes氏が2013年に行ったDockerのデモが今でもYouTubeで見ることができる https://www.youtube.com/watch?v=wW9CAH9nSLs

簡単にパッケージできる能力とその軽量さが特長

ソフトウェアをあるマシンから別のマシンへ持ち込むには、関連するファイルを全部コピーする方法、インストーラーを使ってインストールできるようにパッケージングする方法、仮想マシンのイメージで持ち込む方法などが考えられます。

しかし、いちいち手作業でファイルをコピーするのも、インストーラーをつくるのも手間がかかります。仮想マシンのイメージも、イメージをつくるのも起動するのも時間がかかります。

もっと手軽にソフトウェアをパッケージして、他のマシンへ移動できるようにしたい。そのためにつくられたのがDockerです。

Dockerには、ソフトウェアを簡単にパッケージして別のマシンへ持ち込む機能、そしてわずか数秒(もしくは1秒以下)ですぐに起動できる軽量な仮想マシン、という2つの大きな特長があります。

圧倒的な短時間で仮想マシンを立ち上げ

まずは、軽量さについて見てみましょう。図版2が、仮想化ハイパーバイザーによる一般的なサーバー仮想化と、Dockerによるコンテナ型仮想化の仕組みを比較した図です。図の左が従来の一般的なサーバー仮想化、右がDockerによるコンテナ型仮想化です。

左側の従来の仮想化では、仮想マシンが3つ立ち上がり、それぞれの仮想マシン内でさらにOperating System(OS)が起動します。そのため、1つの仮想マシンでアプリケーションが動くまでに、まず仮想化ハイパーバイザーによって物理マシンそっくりの仮想マシンが立ち上がり、そのまっさらな仮想マシン上でOSが起動するのをさらに待つ必要があります。通常、このプロセスには数分かかるでしょう。

一方、右側のコンテナ型仮想化では、すでに起動済みのOSをDocker Engineによって分割することで、アプリケーションを実行するためのユーザー空間をつくり出すという仕組みです。この場合、アプリケーションが動くまでのプロセスは、起動済みのOSのユーザー空間をDocker Engineによって新たなコンテナとして切り出すだけです。通常ならコンマ何秒もしくは数秒で済むでしょう。

このようにDockerによるコンテナ型仮想化は、OSのユーザー空間を論理的に分割することによって仮想マシンをつくり出すという仕組みのため、従来の仮想化と比べて圧倒的な短時間で新たな仮想マシンが立ち上がります。

同時に、従来の仮想化ではハイパーバイザーがつくり出した3つの仮想マシンと、その上で稼働する3つのOSが同時に動いています。これはプロセッサの能力やメモリを多く消費することになります。一方、コンテナ型仮想化では、動いているOSは1つだけなので、仮想化によるプロセッサの能力やメモリの消費は非常に小さな影響で済みます。

コンテナ型仮想化は起動時間が短いため、すぐにアプリケーションが起動し、しかも仮想化によるオーバーヘッドも小さい。この2つにより「Dockerコンテナは軽い」という表現がよく使われることになるわけです。

また企業における運用の一般論として、仮想化ハイパーバイザーの管理はインフラ管理者が行うことが多いため、プログラマーなど開発担当者が自分で仮想マシンの起動や終了を行う権限を持っていないことが多く、それに対してコンテナ型仮想化はLinuxのコマンドで起動や終了ができるため、開発担当者が気軽に採用して実行できます。

こうした扱いやすさも、Dockerによるコンテナ型仮想化が急速に普及した背景にあることは間違いありません。

コラム図版_図版2
図版2●仮想化ハイパーバイザーによる「一般的なサーバー仮想化」とDockerによる「コンテナ型仮想化」の比較 (http://www.docker.com/about_docker/docker/から引用。現在は削除済み)

コンテナ型仮想化は決して新しい技術ではなかった

実は、こうしたDockerの機能を実現する基本的な能力のほとんどを、当時のLinuxは備えていました。Dockerが実現するコンテナ型仮想化の技術は決して新しいものではなく、それ以前から存在する技術だったのです

Dockerはこのコンテナ型仮想化の技術をLinuxの使いやすいコマンドとして実装したことで、急速な普及を実現したのです。

今回はDockerが開発された経緯と、その特長である軽量さなどについて従来の仮想化との比較を紹介しました。次回は、もうひとつの特長であるパッケージ機能について紹介します。

IT羅針盤

※このコラムは不定期連載です。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。

新野淳一

新野淳一Junichi Niino

ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者。IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。

「Kubernetesセキュリティ/コンテナセキュリティ」に関連する製品・サービス