開閉ボタン
ユーザーメニュー
ユーザーメニューコンテンツ
ログイン

  • 会員限定
  • 2021/05/07

コンテナとは何か解説、従来の仮想化と何が違う?DockerやKubernetesとは?

システム開発において、仮想化は欠かせない技術です。しかし、従来の仮想化技術では、かなりの計算リソースを取られてしまうという欠点がありました。それを解決する新しい仮想化手法として「コンテナ」と呼ばれる技術が登場しています。本記事では、近年急速に広まっているコンテナについて、仮想化の基礎から「Docker」「Kubernetes」まで、やさしく解説していきます。

フリーライター 三津村直貴

フリーライター 三津村直貴

合同会社Noteip代表。ライター。米国の大学でコンピューターサイエンスを専攻し、卒業後は国内の一部上場企業でIT関連製品の企画・マーケティングなどに従事。退職後はライターとして書籍や記事の執筆、WEBコンテンツの制作に関わっている。人工知能の他に科学・IT・軍事・医療関連のトピックを扱っており、研究機関・大学における研究支援活動も行っている。著書『近未来のコア・テクノロジー(翔泳社)』『図解これだけは知っておきたいAIビジネス入門(成美堂)』、執筆協力『マンガでわかる人工知能(池田書店)』など。

photo
仮想化手法の1つ、コンテナについて仮想化の基礎から始め、わかりやすく解説します
(Photo/Getty Images)

コンテナを知る前に…仮想環境の使われ方

 「コンテナ」とは、アプリの動作環境を仮想的に構築する技術の1つです。PCの中に仮想のPCを作りアプリを動かす技術と考えると分かりやすいです。

 仮想的なPCの中でアプリを動作させること自体はインターネットに接続している時点で当たり前のように行われているのですが、エンジニアやプログラマでない限りはあまり意識的に使うことがないかもしれません。そこで、コンテナについて解説する前に、初歩的なことですが「仮想環境」について理解しておきましょう。

画像
仮想化の概念図。それぞれ別の物理サーバを、(その上にあるOSとアプリはそのままに)仮想化によってまとめ、1つの物理サーバ上で複数のアプリを動作できるようにしている

 まず、身近な用途で仮想環境を使う例を挙げてみましょう。たとえば、MacOSの中でWindowsを起動させてWindows専用アプリを使ったり、Windowsの中にAndroidを起動させてAndroidアプリを使ったり、単純に使っているPCのOSとは別のOSを使うために仮想環境を構築することがよくあります。

 そのほかにも特定のアプリだけが動いているようにするためウイルス対策ソフトなどの常駐アプリがない環境を作ったり、不具合の多いアプリを使用中のOSから隔離する目的で仮想環境を作ったりすることもあります。

 ただ、仮想環境の用途として最も重要なのは「安全で効率的なアプリの開発や運用」を行うための仮想化です。複数のチームが同時にさまざまなアプリを開発する中で、動作テストをしたり、調整やアップデートをしたり、ユーザーに使ってもらったり、さまざまなケースでアプリが使われます。ほかのチームと同じ環境が必要な場合、運用中のシステムとまったく同じ環境が必要な場合、ユーザーごとに異なる環境が必要な場合、それぞれのユースケースにおいて必要な環境が異なります。

 この環境ごとに別々のPCやサーバを用意していたのでは、ハードウェアがいくつあっても足りません。そこで、1つのサーバやPC上に仮想的に必要とされる環境を構築し、それぞれの用途で自由にアプリを使用できるようにするのです。

コンテナは従来の仮想化と何が違うのか

 従来の仮想化では、1つの仮想環境の中に必要なものをOSからすべて作ってしまう方式でした。これは異なるOS環境を使いたい場合には有用でしたが、実際の開発・運用においては「OS周りは同じでいいのに」というケースが多く、いちいちOSまで作ってしまうのはリソースの無駄になっていました。そこで登場したのが「コンテナ」です。

 コンテナ環境ではOS周辺の環境は共通で利用する一方、アプリが使用するCPU・メモリ・ファイル・プロセス空間などは別々にまとまった「コンテナ」として管理します。

画像
従来の仮想化とコンテナの違い。仮想化ソフトの代わりに、コンテナを動作させるコンテナエンジン(後述の「Docker」など)がホストOS上にある。各コンテナは独立して動作する

 これにより、アプリを実行するのに十分な独立した仮想環境を得ながら、OS関連でリソースを使わないため単純にリソースが節約できます。さらに、仮想環境の構築・記録・削除が素早くなるため、軽量のサーバでも仮想環境が作れるという大きなメリットにつながっています。

 一見すると、構造的にはOSを重複させているかどうかの違いしかありません。そこで、PCやスマホの起動やシャットダウンをイメージしてもらえると分かりやすいのですが、OSの構築や正常なシャットダウンにはかなりの時間がかかります。OSが使用するリソースも馬鹿にならないため、OSを節約できるだけでもかなりの効率化になるのです。

 例えるなら、ワンルームのアパート経営とシェアハウスのアパート経営の違いをイメージすると良いかもしれません。ワンルーム(従来の仮想環境)ならユーザーそれぞれにキッチンやトイレが必要ですが、シェアハウス(コンテナ)なら共用部分が1つで済むので賃借人には低コストで提供できます。また、退去時の清掃や入居時の契約などもシェアハウスなら簡単です。

画像
物流業界でのコンテナ同様、「入れ物」としてアプリの実行環境をひとまとめにしています
(Photo/Getty Images)

 ただし、コンテナでは他のユーザーとの共有部分が存在するため、共有部分に満足が行かない場合には却って使いづらい手法になります。自由にOSが変更できないので、他のOSやバージョン違いのOS、微妙に設定が違うOSなどでテストすることができません。開発の真っ只中で基本的な動作テストができればいいという場合ならそれでも良いのですが、開発終盤で「実際の使用環境でテストしたい」という場合にはOS環境を変えられないのはかえって不便です。

【次ページ】コンテナでよく聞く単語「Docker」「Kubernetes」とは?

お勧め記事

仮想化ソフトウェア ジャンルのセミナー

仮想化ソフトウェア ジャンルのトピックス

仮想化ソフトウェア ジャンルのIT導入支援情報

ビジネス+IT 会員登録で、会員限定コンテンツやメルマガを購読可能、スペシャルセミナーにもご招待!