2
会員になると、いいね!でマイページに保存できます。
システム開発において、仮想化は欠かせない技術です。しかし、従来の仮想化技術では、かなりの計算リソースを取られてしまうという欠点がありました。それを解決する新しい仮想化手法として「コンテナ」と呼ばれる技術が登場しています。本記事では、近年急速に広まっているコンテナについて、仮想化の基礎から「Docker」「Kubernetes」まで、やさしく解説していきます。
コンテナを知る前に…仮想環境の使われ方
「コンテナ」とは、アプリの動作環境を仮想的に構築する技術の1つです。PCの中に仮想のPCを作りアプリを動かす技術と考えると分かりやすいです。
仮想的なPCの中でアプリを動作させること自体はインターネットに接続している時点で当たり前のように行われているのですが、エンジニアやプログラマでない限りはあまり意識的に使うことがないかもしれません。そこで、コンテナについて解説する前に、初歩的なことですが「仮想環境」について理解しておきましょう。
まず、身近な用途で仮想環境を使う例を挙げてみましょう。たとえば、MacOSの中でWindowsを起動させてWindows専用アプリを使ったり、Windowsの中にAndroidを起動させてAndroidアプリを使ったり、単純に使っているPCのOSとは別のOSを使うために仮想環境を構築することがよくあります。
そのほかにも特定のアプリだけが動いているようにするためウイルス対策ソフトなどの常駐アプリがない環境を作ったり、不具合の多いアプリを使用中のOSから隔離する目的で仮想環境を作ったりすることもあります。
ただ、仮想環境の用途として最も重要なのは「安全で効率的なアプリの開発や運用」を行うための仮想化です。複数のチームが同時にさまざまなアプリを開発する中で、動作テストをしたり、調整やアップデートをしたり、ユーザーに使ってもらったり、さまざまなケースでアプリが使われます。ほかのチームと同じ環境が必要な場合、運用中のシステムとまったく同じ環境が必要な場合、ユーザーごとに異なる環境が必要な場合、それぞれのユースケースにおいて必要な環境が異なります。
この環境ごとに別々のPCやサーバを用意していたのでは、ハードウェアがいくつあっても足りません。そこで、1つのサーバやPC上に仮想的に必要とされる環境を構築し、それぞれの用途で自由にアプリを使用できるようにするのです。
コンテナは従来の仮想化と何が違うのか
従来の仮想化では、1つの仮想環境の中に必要なものをOSからすべて作ってしまう方式でした。これは異なるOS環境を使いたい場合には有用でしたが、実際の開発・運用においては「OS周りは同じでいいのに」というケースが多く、いちいちOSまで作ってしまうのはリソースの無駄になっていました。そこで登場したのが「コンテナ」です。
コンテナ環境ではOS周辺の環境は共通で利用する一方、アプリが使用するCPU・メモリ・ファイル・プロセス空間などは別々にまとまった「コンテナ」として管理します。
これにより、アプリを実行するのに十分な独立した仮想環境を得ながら、OS関連でリソースを使わないため単純にリソースが節約できます。さらに、仮想環境の構築・記録・削除が素早くなるため、軽量のサーバでも仮想環境が作れるという大きなメリットにつながっています。
一見すると、構造的にはOSを重複させているかどうかの違いしかありません。そこで、PCやスマホの起動やシャットダウンをイメージしてもらえると分かりやすいのですが、OSの構築や正常なシャットダウンにはかなりの時間がかかります。OSが使用するリソースも馬鹿にならないため、OSを節約できるだけでもかなりの効率化になるのです。
例えるなら、ワンルームのアパート経営とシェアハウスのアパート経営の違いをイメージすると良いかもしれません。ワンルーム(従来の仮想環境)ならユーザーそれぞれにキッチンやトイレが必要ですが、シェアハウス(コンテナ)なら共用部分が1つで済むので賃借人には低コストで提供できます。また、退去時の清掃や入居時の契約などもシェアハウスなら簡単です。
ただし、コンテナでは他のユーザーとの共有部分が存在するため、共有部分に満足が行かない場合には却って使いづらい手法になります。自由にOSが変更できないので、他のOSやバージョン違いのOS、微妙に設定が違うOSなどでテストすることができません。開発の真っ只中で基本的な動作テストができればいいという場合ならそれでも良いのですが、開発終盤で「実際の使用環境でテストしたい」という場合にはOS環境を変えられないのはかえって不便です。
【次ページ】コンテナでよく聞く単語「Docker」「Kubernetes」とは?
関連タグ