(57)【特許請求の範囲】
【請求項１】
特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用される、共通領域の設定のためのコンテナテンプレート及びユーザ領域の設定のためのユーザ領域テンプレートと、前記ユーザ領域テンプレートに基づく設定に対して前記特定のユーザ個別の設定をするための前記特定のユーザ個別の設定ファイルとを用いて、前記特定のユーザのコンテナを作成するコンテナ管理手段を備え、
前記コンテナ管理手段は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ収容装置。
【請求項２】
前記コンテナ管理手段は、前記特定のユーザのコンテナを別のコンテナに更新することを指示する命令を受信した場合に、前記特定のユーザのコンテナを停止し、前記別のコンテナに対応するモデルデータを用いて、当該別のコンテナを作成する
ことを特徴とする請求項１に記載のコンテナ収容装置。
【請求項３】
前記データ領域に対してデータが読み書きされる頻度又はデータ量を監視し、当該頻度又はデータ量に基づいて、当該データ領域に接続させる外部領域を決定する監視制御手段
を更に備えることを特徴とする請求項１又は２に記載のコンテナ収容装置。
【請求項４】
前記監視制御手段は、前記頻度又はデータ量が所定の閾値よりも大きい場合に、前記データ領域に接続させる外部領域を高速なストレージにおける領域として決定し、前記頻度又はデータ量が所定の閾値以下である場合に、前記データ領域に接続させる外部領域を、前記高速なストレージよりも低速なストレージにおける領域として決定する
ことを特徴とする請求項３に記載のコンテナ収容装置。
【請求項５】
前記外部領域は、所定のアプリケーションサービスを提供するサーバ内の領域である
ことを特徴とする請求項１ないし４のうちいずれか１項に記載のコンテナ収容装置。
【請求項６】
複数コンテナ間で平等にリソースを使用できるようにするとともに、全体のリソースに余裕がある場合でも、１コンテナが使用するリソースを所定の上限値に制限するリソース制御手段
を更に備えることを特徴とする請求項１ないし５のうちいずれか１項に記載のコンテナ収容装置。
【請求項７】
特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置が実行するコンテナ作成方法であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用される、共通領域の設定のためのコンテナテンプレート及びユーザ領域の設定のためのユーザ領域テンプレートと、前記ユーザ領域テンプレートに基づく設定に対して前記特定のユーザ個別の設定をするための前記特定のユーザ個別の設定ファイルとを用いて、前記特定のユーザのコンテナを作成するコンテナ作成ステップを備え、
前記コンテナ作成ステップにおいて、前記コンテナ収容装置は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ作成方法。
【請求項８】
コンピュータを、請求項１ないし６のうちいずれか１項に記載のコンテナ収容装置における各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共用ホスティングサービスにおけるサービス提供方式に関連するものである。
【背景技術】
【０００２】
近年では、VPS(Virtual Private Server)やクラウドといったCPU/メモリ/ディスクなどを占有する仮想サーバ型のホスティングサービスが広がりつつある。しかし、仮想サーバ型のホスティングサービスでは、ユーザにおいてサーバを管理運用する手間が個々のサーバ毎に発生する。これに対し、サーバ資源を他のユーザと共有することで、低コストでサーバ管理の手間がかからない共用ホスティングサービスが主に中小企業ユーザに広く利用されている。
【０００３】
従来の共用ホスティングサービスの提供手法では、単一のプロセスを一筐体内において多数の収容ユーザで共有する。具体的には、共有デーモンプロセスを用意し、利用ユーザをドメインなどのユーザ固有の情報で振り分け、筐体のリソースを収容ユーザで共有する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2014-235644号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のようにプロセスをユーザ間で共有する方式では、例えば、収容されている一部のユーザが大量のリソースを占有した場合、他のユーザがサービスを利用できないといった影響を受ける場合がある。また、プロセスを利用する全ユーザ間で共通のリソースの設定を用いらなければならないという問題もある。
【０００６】
すなわち、従来技術では、サーバリソースをユーザ間で共用する共用ホスティングサービスにおいて、リソースの制御をユーザ毎に適切に行うことができないという問題があった。
【０００７】
本発明は上記の点に鑑みてなされたものであり、サーバリソースをユーザ間で共用する共用ホスティングサービスにおいて、リソースの制御をユーザ毎に適切に行うことを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の実施の形態によれば、特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用される、共通領域の設定のためのコンテナテンプレート及びユーザ領域の設定のためのユーザ領域テンプレートと、前記ユーザ領域テンプレートに基づく設定に対して前記特定のユーザ個別の設定をするための前記特定のユーザ個別の設定ファイルとを用いて、前記特定のユーザのコンテナを作成するコンテナ管理手段を備え、
前記コンテナ管理手段は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ収容装置が提供される。
【０００９】
また、本発明の実施の形態によれば、特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置が実行するコンテナ作成方法であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用される、共通領域の設定のためのコンテナテンプレート及びユーザ領域の設定のためのユーザ領域テンプレートと、前記ユーザ領域テンプレートに基づく設定に対して前記特定のユーザ個別の設定をするための前記特定のユーザ個別の設定ファイルとを用いて、前記特定のユーザのコンテナを作成するコンテナ作成ステップを備え、
前記コンテナ作成ステップにおいて、前記コンテナ収容装置は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ作成方法が提供される。
【発明の効果】
【００１０】
本発明の実施の形態によれば、サーバリソースをユーザ間で共用する共用ホスティングサービスにおいて、リソースの制御をユーザ毎に適切に行うことを可能とする技術を提供することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態におけるシステムの全体構成図である。
【図２】コンテナ収容装置１００においてコンテナが生成された後の構成例を示す図である。
【図３】コンテナ収容装置１００の構成をより具体的に示す図である。
【図４】コンテナ作成の概要を示す図である。
【図５】テンプレートの内容例を示す図である。
【図６】コンテナ作成時の処理例を示すフローチャートである。
【図７】アップデート処理の概要を示す図である。
【図８】アップデート時の処理例を示すフローチャートである。
【図９】ユーザ領域テンプレートの配付処理の例を示す図である。
【図１０】ユーザデータのストレージを使い分ける例を説明するための図である。
【図１１】外部のサービスとの連携を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。
【００１３】
（実施の形態の概要）
本実施の形態では、サーバアプリケーション、ライブラリモジュール、共通設定等からなるコンテナテンプレートを作成し、コンテナテンプレートからユーザ毎のコンテナを作成することとしている。これにより、各コンテナに収容される収容ユーザのプロセス空間の分離を行う。これによりリソースについてコンテナ単位で適切に制御できるようになる。
【００１４】
また、ユーザが作成するデータやカスタマイズ可能な設定ファイルはコンテナとは別のストレージにデータ領域として確保し、コンテナとして作成された仮想ストレージのレイヤ化を行い、データ領域をバインドマウントすることで、ユーザは共通領域（コンテナ）とデータ領域の種別の境界を特に意識することなく透過的にファイルシステムを扱うことができる。
【００１５】
＜コンテナについて＞
ここで、コンテナの概要を簡単に説明しておく。なお、コンテナ自体は既存技術である。一般にＯＳの内部は、アプリケーション（OS上で動作するソフトウェア）が使用するユーザ空間と、カーネルが使用するカーネル空間とに分かれる。アプリケーションが実行されると、ユーザ空間においてプロセス（プログラムの実行単位）が生成される。コンテナの技術では、プロセスをグループ化し、他のグループやグループに属していないプロセスから隔離した空間で動作させる。この空間（仮想的な環境）をコンテナと呼ぶ。
【００１６】
コンテナの技術では、コンテナ内のプロセスからは他のコンテナのプロセスにアクセスすることはできない。また、ＣＰＵ、メモリ、デバイス等については、コンテナ毎に、コンテナから利用できる範囲が制限される。
【００１７】
なお、コンテナの作成等を行うためのソフトウェア（"コンテナ管理ソフト"と呼ぶ）としては種々のものがあるが、本実施の形態では、一例として、Docker（登録商標）を使用することを想定している。ただし、本発明を適用できるコンテナ管理ソフトは、特定のコンテナ管理ソフトに限定されるわけではなく、様々なコンテナ管理ソフトを適用して本発明を実施することができる。
【００１８】
（システム全体構成）
図１に、本発明の実施の形態に係るシステムの全体構成例を示す図である。図１に示すように、本実施の形態に係るシステムは、コンテナ収容装置１００と管理装置２００を有する。
【００１９】
コンテナ収容装置１００と管理装置２００はそれぞれ、ネットワークに接続されている装置であり、コンテナ収容装置１００と管理装置２００との間で通信が可能である。また、コンテナ収容装置１００と管理装置２００はそれぞれ、１つ又は複数の物理的なサーバ（コンピュータ）であってもよいし、１つ又は複数の仮想サーバであってもよい。コンテナ収容装置１００を「ホスト」と称してもよい。
【００２０】
＜コンテナ収容装置＞
コンテナ収容装置１００は、各ユーザに対して共用ホスティングサービスを提供する装置である。本実施の形態では、コンテナ収容装置１００内にユーザ毎のコンテナが作成される。
【００２１】
図１に示すように、コンテナ収容装置１００は、コンテナ管理部１１０、テンプレート格納部１２０、監視制御部１３０を含む。コンテナ管理部１１０は、管理装置２００からの指示に基づいて、コンテナを作成、更新するための機能部であり、本実施の形態では、コンテナ管理ソフト、プロビジョニングスクリプト（プログラム）等により実現される機能部である。
【００２２】
テンプレート格納部１２０は、コンテナテンプレートと、ユーザ領域テンプレートを格納している。本実施の形態のコンテナテンプレートは、コンテナイメージと呼んでもよく、コンテナ間で共通であり、コンテナのひな形となるデータ（モデルデータと呼んでもよい）である。テンプレートに基づいて各ユーザのコンテナが作成されるが、その際に、ユーザ個別の設定がなされる。
【００２３】
ユーザ領域テンプレートは、コンテナにおけるユーザ領域（ユーザが書き換え可能な領域）の初期設定、初期データ等からなる。ユーザ領域テンプレート自体は、コンテナ間で共通であるが、コンテナ作成時に、ユーザ個別の設定（設定ファイル格納等）がなされる。
【００２４】
監視制御部１３０は、コンテナにおけるプロセスの実行に伴って発生するユーザデータの読み書きの頻度又はデータ量を監視して、当該頻度又はデータ量に応じて、ユーザデータを格納するストレージ等を使い分ける機能部である。なお、監視制御部１３０は、コンテナを構成するプログラム（つまり、コンテナテンプレートを構成するプログラム）により実現される機能部であってもよいし、コンテナの外部のプログラム（コンテナ収容装置１００が実行するプログラム）で実現される機能部であってもよい。
【００２５】
また、監視制御部１３０は、ユーザのコンテナ利用に関するリソース制御の機能も有している。この機能は「fair share」の考えに基づくものであり、具体的には、監視制御部１３０に、各ユーザ（１コンテナ）が利用できるリソース（例：CPUリソース、メモリリソース）の相対値と最大値が設定され、監視制御部１３０は、これらの値に基づいてリソース制御を行う。
【００２６】
相対値は、１ユーザに割り当てられるリソースの量である。監視制御部１３０は、コンテナ収容装置１００の全体負荷が高い場合には、各ユーザのリソースを相対値に制限するが、コンテナ収容装置１００のリソースに余裕がある場合には、相対値以上のリソースの使用を許容する。ただし、最大値を超えることはできない。このようなリソース制御により、コンテナ収容装置１００の全体のリソースを有効に活用できるとともに、複数コンテナ間で平等にリソースを利用できる。
【００２７】
最大値はコンテナ収容装置１００のリソースに余裕がある状態で、１ユーザが利用できるリソース上限値を表す。このような上限値を設定することで１コンテナが暴走した場合でもコンテナ収容装置１００全体のリソースを占有しないようにすることができる。
【００２８】
すなわち、監視制御部１３０は、複数コンテナ間で平等にリソースを使用できるようにするとともに、全体のリソースに余裕がある場合でも、１コンテナが使用するリソースを所定の上限値に制限するリソース制御の機能を有する。
【００２９】
なお、監視制御部１３０におけるリソース制御の機能は、後述するＯＳにおけるコンテナ機能３７を利用して実現してもよいし、コンテナ機能３７とは別の機能として実現してもよい。また、リソース制御の機能を監視制御部１３０とは別の機能部として設けてもよい。
【００３０】
本実施の形態に係るコンテナ収容装置１００は、例えば、１つ又は複数のコンピュータに、本実施の形態で説明するコンテナ管理部１１０と監視制御部１３０における処理内容を記述したプログラムを実行させることにより実現可能である。すなわち、コンテナ収容装置１００が有する機能は、当該コンピュータに内蔵されるＣＰＵやメモリ、ハードディスクなどのハードウェア資源を用いて、コンテナ収容装置１００で実施される処理に対応するプログラムを実行することによって実現することが可能である。上記プログラムは、コンピュータが読み取り可能な記録媒体（可搬メモリ等）に記録して、保存したり、配付したりすることが可能である。また、上記プログラムをインターネットや電子メールなど、ネットワークを通して提供することも可能である。
【００３１】
＜管理装置＞
図１に示すように、管理装置２００は、オーダー管理部２１０、コンテナ収容装置管理部２２０、テンプレート格納部２３０を有する。オーダー管理部２１０は、運用者等からのオーダーに従って、コンテナ収容装置１００に対してコンテナ作成を指示する機能部である。コンテナ収容装置管理部２２０は、運用者からのアップデート命令を受けて、コンテナのアップデートを実行する。テンプレート格納部２３０は、各種のバージョンのテンプレートを格納しており、テンプレートをコンテナ収容装置１００に配付する機能を有する。
【００３２】
本実施の形態に係る管理装置２００は、例えば、１つ又は複数のコンピュータに、本実施の形態で説明する処理内容を記述したプログラムを実行させることにより実現可能である。すなわち、管理装置２００が有する機能は、当該コンピュータに内蔵されるＣＰＵやメモリ、ハードディスクなどのハードウェア資源を用いて、管理装置２００で実施される処理に対応するプログラムを実行することによって実現することが可能である。上記プログラムは、コンピュータが読み取り可能な記録媒体（可搬メモリ等）に記録して、保存したり、配付したりすることが可能である。また、上記プログラムをインターネットや電子メールなど、ネットワークを通して提供することも可能である。
【００３３】
（コンテナ収容装置１００の詳細例）
図２は、ユーザ毎のコンテナが作成された状態のコンテナ収容装置１００の構成例を示す図である。図２に示す例では、コンテナテンプレート１０に基づき、各コンテナ（コンテナ１、コンテナ２、コンテナ３）が生成されている。各コンテナには、共通領域とユーザ領域が示されている。共通領域には、設定ファイル１１、ライブラリ１２、デーモン１３が示されている。また、ユーザ領域には、設定ファイル２１、ユーザデータ２２が示されている。
【００３４】
「共通領域」に関して、アプリケーション（デーモン）やライブラリ等、コンテナ間で共通の機能を提供する領域（機能）であることから「共通領域」と呼んでいるが、その動作（プロセスとしての動作）は、コンテナ毎に独立である。設定ファイル１１、ライブラリ１２、デーモン（プログラム）１３等の実体データは、コンテナテンプレート１０（コンテナイメージ）である。コンテナの機能により、各ユーザにとっては、自分のみがこれらを使用するように認識される。なお、コンテナテンプレート１０（コンテナイメージ）が格納される領域が実際の「共通領域」であり、図２に示す「共通領域」は、当該共通領域の内容と同等の内容を持つ領域であることを意味する。
【００３５】
「ユーザ領域」は、ユーザが書き換え可能な領域である。ユーザ領域におけるファイルやデータの初期値はユーザ領域テンプレート２０に基づいて設定されるものである。初期値設定後に、ユーザ個別の設定ファイル２１等が格納（コピー）されることで、ユーザ個別の設定が行われる。また、ユーザにとっては、コンテナにより提供されるファイルシステムの所定のユーザデータ領域がユーザデータ２２の格納領域として見えるが、外部領域のバンドマウントによって、当該外部領域がコンテナのユーザデータ領域に接続され、実際のユーザデータの読み書きは当該外部領域に対して行われる。つまり、ユーザデータ領域の実体は外部領域にある。なお、設定ファイル２１は、バインドマウントにより外部領域に格納してもよいし、バインドマウントを行わずにコンテナの領域に格納してもよい。
【００３６】
図３は、コンテナ収容装置１００の構成をより具体的に示した図である。図３に示すように、ハードウェア３６、ＯＳ３０が存在する。ＯＳ３０として、コンテナ機能を提供可能なＯＳであればどのようなＯＳでもよいが、例えばＬｉｎｕｘ（登録商標）を使用できる。ＯＳ３０の機能としてドライバ３１、コンテナ機能３７が含まれる。
【００３７】
コンテナ機能３７は、コンテナの実現のために利用されるＯＳの機能であり、例えば、Namespaces、cgroups、selinux等がある。
【００３８】
管理インタフェース（management interface）３４は、コンテナ管理ソフト（Docker等）に相当する。
【００３９】
本実施の形態では、コンテナイメージ３３は、コンテナテンプレート１０に相当する。コンテナイメージ３３の内容がコンテナにおける共通領域の内容になるため、図３では、コンテナイメージ３３の部分を共通領域と記載している。
【００４０】
図３の例では、コンテナ１とコンテナ２が起動している例を示している。図３に示すAUFSは、ファイルシステム機能の１つであり、親のファイルシステム（図３の例でコンテナイメージ３３）をすべてリードオンリーにして、その上にライタブルなレイヤを重ねてレイヤを通して１つのファイルシステムのように扱うことを可能とする機能である。ただし、AUFSを使用することは一例に過ぎない。
【００４１】
図３には、各コンテナ内に作成された共通的なファイルシステムのディレクトリに対して、ユーザ個別のユーザデータを格納した外部のユーザデータ領域３５からバインドマウントを行うことが示されている。コンテナ外部のユーザデータ領域３５は、コンテナ収容装置１００内に備えられていてもよいし、別の装置に備えられていてもよい。このようなバインドマウントにより、ユーザは、外部のユーザデータ領域３５を意識することなく、コンテナから各自のデータにアクセスすることができる。
【００４２】
なお、バインドマウントとは、マウントの一種であり、あるファイルパスを別のディレクトリにバインドしてマウントすることができる機能である。例えば、バインドマウントの命令の引数として「／ＡＢＣ  ／ＸＹＺ」を指定した場合に、／ＸＹＺには、／ＡＢＣの中身がバインドされ、／ＸＹＺを使用するユーザには、／ＡＢＣの中身があたかも／ＸＹＺに存在するように見える。
【００４３】
（コンテナの作成について）
図４は、コンテナ作成の概要を示す図である。図４に示すように、運用者からのＧＵＩを介したオーダー（命令）、もしくは、オーダーサーバからのＡＰＩを利用したオーダーに基づいて、管理装置２００のオーダー管理部２１０が、コンテナを収容するサーバ（コンテナ収容装置１００）を決定し、決定したコンテナ収容装置１００のコンテナ管理部１１０に対してコンテナ作成を指示する。
【００４４】
これにより、コンテナ管理部１１０を構成するプロビジョニングスクリプトが実行され、コンテナテンプレート及びユーザ領域テンプレートを用いることで、コンテナが作成（起動）される。
【００４５】
オーダー管理部２１０は、コンテナ管理ＤＢ（データベース）２１１を備えている。コンテナ管理ＤＢ２１１には、例えば、アカウント情報テーブル、ホスト情報テーブル、ＩＰリソース情報テーブルが格納されている。アカウント情報テーブルは、例えば、アカウントＩＤ、収容ホスト名、ＩＰアドレス、プロビジョニングステータス（Active,Holding）、ドメイン名、契約プラン、オプション契約等の情報を格納する。
【００４６】
ホスト情報テーブルは、ホスト名（コンテナ収容装置名）、ホストＩＰアドレス、空きリソース数、収容可能リソース上限等の情報を格納する。ＩＰリソース情報テーブルは、ホストＩＰアドレス、ユーザ割り当て用ＩＰアドレス、アカウントＩＤ等の情報を格納する。
【００４７】
オーダー管理部２１０はオーダーを受け付けると、ホスト情報テーブル、ＩＰリソース情報テーブルから、例えば、リソースの空き状況を考慮して、どのホスト（コンテナ収容装置）にアカウントを収容するかを決定し、決定したコンテナ収容装置１００のコンテナ管理部１１０に、コンテナ作成指示と入力パラメータを与える。
【００４８】
図５に、コンテナテンプレートとユーザ領域テンプレートの例を示す。なお、図５は、コンテナテンプレートとユーザ領域テンプレートのそれぞれに含まれるデータの一部を示すものである。図５（ａ）に示すコンテナテンプレートは、ライブラリ、アプリケーション、インストーラスクリプト等を含む。ライブラリは、OSのモジュール、各種プログラムのモジュール等である。アプリケーションは、認証サーバ、Webサーバ、Mailサーバ、メーリングリストサーバ、DBサーバ、監視サーバ等である。インストーラスクリプトは、提供アプリケーションのインストールパッケージである。
【００４９】
図５（ｂ）に示すように、ユーザ領域テンプレートは、設定ファイル、データディレクトリ、データファイルを含む。設定ファイルについては、ユーザ毎にコンテナ作成時に、初期設定情報が格納される。データディレクトリは、各種のデータを格納するディレクトリである。また、データファイルには、初期データが格納されている。
【００５０】
図６は、コンテナ作成の命令を受けたコンテナ管理部１１０の処理手順例を示すフローチャートである。この処理手順は、プロビジョニングスクリプトの内容に相当する。図６を参照してコンテナ管理部１１０の動作を説明する。
【００５１】
コンテナ管理部１１０は、オーダー管理部２１０から、コンテナ作成命令の入力パラメータとして、アカウントID、パスワード、ドメイン名、IPアドレス、使用コンテナテンプレートID等を受信している。
【００５２】
コンテナ管理部１１０は、アカウントＩＤにより、アカウントを作成し（ステップＳ１０１）、コンテナを作成する（ステップＳ１０２）。ここでは、コンテナテンプレートＩＤで指定されたコンテナテンプレートに対応するコンテナが作成される。また、ステップＳ１０２において、コンテナにおける予め定めた領域に対して、予め定めたユーザデータ領域（例えばアカウントIDにより識別される領域）をバインドマウントする処理も実行される。
【００５３】
次に、ユーザ領域テンプレートの展開を行う（ステップＳ１０３）。これにより、ユーザが書き換え可能な領域における初期データの格納等がなされる。そして、コンテナの初期設定が行われる（ステップＳ１０４）。ここでは、例えば、LDAPエントリ作成、設定ファイル生成等が行われる。そして、コンテナのアクセス設定（ステップＳ１０５）、監視設定（ステップＳ１０６）、リソース制限設定（ステップＳ１０７）が行われる。
【００５４】
ステップＳ１０７のリソース制限設定においては、例えば、１コンテナが利用できるＣＰＵリソース（例：単位時間当たりの割り当て時間）の上限値、メモリ容量の上限値等が設定される。
【００５５】
（コンテナのアップデートについて）
本実施の形態では、コンテナ管理部１１０は、コンテナの更新機能（アップデート機能）を有している。図７を参照してアップデート処理を説明する。なお、アップデートとは、例えば、コンテナを、旧バージョンのものから新バージョンのものに入れ替えることである。また、コンテナのアップデートは、コンテナ収容装置１００に収容される複数ユーザの複数コンテナに対して一括で行ってもよいし、個々のユーザ毎に行うこととしてもよい。
【００５６】
図７（ａ）は、コンテナの入れ替え前の状態を示す。ここで、例えば運用者からアップデート命令がコンテナ収容装置管理部２２０に入力されたとする。アップデート命令には、アップデート対象のコンテナを識別する情報（アカウントIDでもよいし、コンテナIDでもよい）、更新後のコンテナに対応するコンテナテンプレートを識別する情報（コンテナテンプレートID）が含まれる。なお、更新後のコンテナに対応するコンテナテンプレート（新コンテナテンプレート）は、予めコンテナ収容装置１００に格納されていてもよいし、更新時に、テンプレート格納部２３０から取得することとしてもよい。
【００５７】
命令を受けたコンテナ収容装置管理部２２０は、対象のコンテナ収容装置１００のコンテナ管理部１１０に対して、新コンテナテンプレートを指定したアップデート命令を送信する。
【００５８】
図７（ｂ）に示すように、アップデート命令を受信したコンテナ管理部１１０は、現在のコンテナを削除（停止）し、コンテナテンプレートの更新を行う。コンテナテンプレートの更新とは、新コンテナテンプレートをダウンロードすることであってもよいし、コンテナ収容装置１００に予め格納されている新コンテナテンプレートを読み出すことであってもよい。そして、図７（ｃ）に示すように、新コンテナテンプレートによる新たなコンテナを作成する。
【００５９】
図８は、アップデート命令を受信したコンテナ管理部１１０の動作を示すフローチャートである。
【００６０】
図８に示すように、まず、旧コンテナの停止を行う（ステップＳ２０１）。そして、新コンテナテンプレートを用いて、新コンテナを起動する（ステップＳ２０２）。前述したコンテナ作成の場合と同様に、バインドマウントの設定も行われる。また、前述したコンテナ作成の場合と同様に、コンテナのアクセス設定（ステップＳ２０３）、監視設定（ステップＳ２０４）、リソース制限設定（ステップＳ２０５）が行われる。
【００６１】
上記のように、コンテナ（つまり共通領域）を別のテンプレートのイメージに入れ替えてもユーザのデータやカスタマイズされた設定は保持される。そのため、カスタマイズ性とソフトウェアのアップデート作業が容易になる。
【００６２】
（ユーザ領域テンプレートの配付処理例）
図９は、ユーザ領域テンプレートの配付処理例を示す図である。テンプレート格納部２３０には、各バージョンのコンテナテンプレートと各バージョンのユーザ領域テンプレートが格納されている。図９の例では、テンプレート格納部２３０から、例えば、新バージョンのユーザ領域テンプレートが、コンテナ収容装置１００（Ａ）に配付され、コンテナ収容装置１００（Ａ）において当該ユーザ領域テンプレートが適用される。また、ユーザ領域テンプレートにより設定された設定ファイルに対し、運用者からユーザ個別の設定ファイルがコピーされ、ユーザ個別の設定が行われることが示されている。
【００６３】
また、図９の例では、一例として、テンプレート格納部２３０から、コンテナ収容装置管理部２２０を経由して、新たなコンテナ収容装置１００（Ｂ）にユーザ領域テンプレートが配付されることが示されている。
【００６４】
（ユーザデータ領域のストレージを使い分ける例）
コンテナ収容装置１００における監視制御部１３０は、ユーザデータの読み書きの頻度（例：単位時間当たりの読み書き回数）、読み書きされるデータ量（例：単位時間当たりのデータ量）等をファイル毎（ディレクトリ毎でもよい）に監視する。なお、「読み書き」とは、「読み」（read）のみでもよいし、「書き」（write）のみでもよいし、「読み」と「書き」の合計であってもよい。また、監視方法は特定の方法に限られない。例えば、コンテナにおいて設定されているファイルシステムのファイル／ディレクトリ（つまり、ユーザから見えるファイル／ディレクトリ）を監視してもよいし、バインドマウントの元の領域（外部領域）のファイル／ディレクトリを監視してもよい。
【００６５】
監視制御部１３０は、頻繁に読み書きのあるデータ（例：所定の閾値よりも高い読み書き頻度のファイル／ディレクトリ）をホットデータとし、あまりアクセスのないデータ（例：所定の閾値以下の読み書き頻度のファイル／ディレクトリ）をコールドデータとして、バインドマウントを行う対象ストレージを使い分ける。これにより、より高いI/Oパフォーマンスが要求されるデータに対してはSSDなどの高速なストレージを用い、ほとんど読み書きのないコールドデータには、高容量でコストの安いストレージを用いるといった要求I/Oに応じた使い分けが可能になる。つまり、ストレージリソースの制御を柔軟に行うことができる。
【００６６】
図１０は、ストレージの使い分けを行っている例を示す図である。図１０の例では、コンテナにおいて/home/user/mailのディレクトリにあるデータの読み書き頻度が高いため、/home/user/mailに対しては、高速なストレージであるストレージＡのユーザデータ領域がバインドマウントされている。一方、/home/archive/filesのディレクトリにあるデータの読み書き頻度は低いため、/home/archive/filesに対しては、低速なストレージであるストレージＢのユーザデータ領域がバインドマウントされている。監視制御部１３０は、バインドマウントの切り替えを動的に行うことが可能である。
【００６７】
（外部のサービスとの連携の例）
本実施の形態におけるコンテナにより、外部のサービスを利用することが可能である。図１１はその手順を説明するための図である。
【００６８】
図１１に示すように、例えば、ユーザがSaaSなどの外部のクラウドのアプリケーションを契約する（ステップＳ３０１）。
【００６９】
そして、ユーザあるいは運用者が、コンテナのユーザ領域（ユーザデータの領域）に対して、提供されるアプリケーションの領域（外部アプリケーションが提供されるサーバの領域）をバインドマウントする（ステップＳ３０２）。これにより、ユーザは外部サービスを意識することなく、あたかも自身のコンテナ内にアプリケーションがインストールされているかのように外部サービスを利用することができる（ステップＳ３０３）。
【００７０】
また、コンテナ管理部１１０を構成するプロビジョニングスクリプトに、外部サービスからのバインドマウント処理を記述しておくことで、外部のサービスとの連携がなされた状態でコンテナを起動することができる。
【００７１】
（実施の形態の効果）
ユーザ間でプロセスを共用する従来技術においては、収容されている一部のユーザが大量のリソースを占有した場合、他の利用者がサービスを利用できないといった影響を受けたり、アカウントが乗っ取られる等のアブユースがあった場合に、ユーザ全体のレスポンスが低下するといった影響が発生する。また、ソフトウェアに権限昇格などの深刻なバグがあった場合に、セキュリティ面での懸念もある。
【００７２】
これらに対し、本実施の形態の技術によれば、サーバアプリケーション、ライブラリモジュール、共通設定等のテンプレートに基づいてコンテナを作成し、収容ユーザのプロセス空間の分離を行うこととしたので、リソース制御についてコンテナ単位で制御できるようになる。また、プロセス空間はコンテナ毎に独立するため、セキュリティの課題について、個々のプロセスが侵食された場合でも影響範囲をコンテナ内に留めることができる。
【００７３】
また、ユーザ間でプロセスを共用する従来技術においては、全ユーザで共通の設定を用いらなければならない。これは、ユーザの利用ユースケースを限定することになり、カスタマイズ性に欠ける。また、従来技術の中には、クラウドを用いて仮想サーバを立ち上げ、ホスティング事業者が管理することで、共用ホスティングと同様のユーザの利便性を実現するサービスがあるが、ソフトウェアアップデートをサーバ毎に個別に実施する必要があるため、作業量の増加により運用コストがプロセス共有型のホスティングよりも高くなるといった課題がある。
【００７４】
これらの課題に対し、本実施の形態の技術によれば、ユーザが作成するデータやカスタマイズ可能な設定ファイルをコンテナとは別のストレージにデータ領域として確保し、データ領域をバインドマウントすることで、ユーザは共通領域とデータ領域の種別の境界を特に意識することなく透過的にファイルシステムを扱うことができる。これにより、共通領域を別のテンプレートに入れ替えてもユーザのデータやカスタマイズされた設定は保持されるため、カスタマイズ性とソフトウェアのアップデート作業が容易になり運用上の課題を解決することができる。
【００７５】
すなわち、本実施の形態の技術により、ユーザごとにプロセスを分離することでユーザのリソース制御の独立性を担保することができる。これにより、ユーザごとの乗っ取り検知や、制限値を超えて利用するユーザのプロセスを落とす、権限の剥奪などの対処が個別に可能になる。
【００７６】
また、ユーザデータ領域に設定ファイルを配置し、インクルードすることでユーザ個別に設定やオプションのカスタマイズが可能となる。また、ユーザ個別のプロセスがコンテナ毎に起動するが、ユーザが利用していない間は、プロセスがアイドル状態となるため、ボトルネックであるディスクIOやCPUリソースを消費しないため、リソースを効率よく利用することが可能になる。
【００７７】
また、本実施の形態の技術により、複数バージョンのアプリケーションを提供し、ユーザが利用したいバージョンを選択できる。実行ファイルは共通領域（例：コンテナテンプレート（イメージ）の実体が格納される領域）にインストールされるが、設定ファイルはユーザ領域（例：バインドマウントするユーザデータ領域）に配置することで、設定をオーバーライドすることができる。つまり、ユーザデータ領域の設定を反映させることができる。
【００７８】
また、ユーザデータ領域と共通領域を分け、共通領域のみを入れ替えることで、ソフトウェアのアップデートを容易に行うことができる。すなわち、ユーザデータ領域はファイルシステムに対して透過的に永続化され、共通領域の入替え前後で変化しない。また、共通領域はリリースごとにテンプレート化することでファイル差分やバージョン管理が可能である。
【００７９】
（実施の形態のまとめ）
以上、説明したように、本実施の形態によれば、特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置であって、前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用されるモデルデータを用いて、前記特定のユーザのコンテナを作成するコンテナ管理手段を備え、前記コンテナ管理手段は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにすることを特徴とするコンテナ収容装置が提供される。
【００８０】
前記コンテナ管理手段は、前記特定のユーザのコンテナを別のコンテナに更新することを指示する命令を受信した場合に、前記特定のユーザのコンテナを停止し、前記別のコンテナに対応するモデルデータを用いて、当該別のコンテナを作成することとしてもよい。
【００８１】
また、前記コンテナ収容装置は、前記データ領域に対してデータが読み書きされる頻度又はデータ量を監視し、当該頻度又はデータ量に基づいて、当該データ領域に接続させる外部領域を決定する監視制御手段を備えることとしてもよい。
【００８２】
前記監視制御手段は、前記頻度又はデータ量が所定の閾値よりも大きい場合に、前記データ領域に接続させる外部領域を高速なストレージにおける領域として決定し、前記頻度又はデータ量が所定の閾値以下である場合に、前記データ領域に接続させる外部領域を、前記高速なストレージよりも低速なストレージにおける領域として決定することとしてもよい。
【００８３】
また、前記外部領域として、所定のアプリケーションサービスを提供するサーバ内の領域を使用してもよい。
【００８４】
また、コンテナ収容装置が、複数コンテナ間で平等にリソースを使用できるようにするとともに、全体のリソースに余裕がある場合でも、１コンテナが使用するリソースを所定の上限値に制限するリソース制御手段備えてもよい。
【００８５】
（第１項）
特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用されるモデルデータを用いて、前記特定のユーザのコンテナを作成するコンテナ管理手段を備え、
前記コンテナ管理手段は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ収容装置。
（第２項）
前記コンテナ管理手段は、前記特定のユーザのコンテナを別のコンテナに更新することを指示する命令を受信した場合に、前記特定のユーザのコンテナを停止し、前記別のコンテナに対応するモデルデータを用いて、当該別のコンテナを作成する
ことを特徴とする第１項に記載のコンテナ収容装置。
（第３項）
前記データ領域に対してデータが読み書きされる頻度又はデータ量を監視し、当該頻度又はデータ量に基づいて、当該データ領域に接続させる外部領域を決定する監視制御手段
を更に備えることを特徴とする第１項又は第２項に記載のコンテナ収容装置。
（第４項）
前記監視制御手段は、前記頻度又はデータ量が所定の閾値よりも大きい場合に、前記データ領域に接続させる外部領域を高速なストレージにおける領域として決定し、前記頻度又はデータ量が所定の閾値以下である場合に、前記データ領域に接続させる外部領域を、前記高速なストレージよりも低速なストレージにおける領域として決定する
ことを特徴とする第３項に記載のコンテナ収容装置。
（第５項）
前記外部領域は、所定のアプリケーションサービスを提供するサーバ内の領域である
ことを特徴とする第１項ないし第４項のうちいずれか１項に記載のコンテナ収容装置。
（第６項）
複数コンテナ間で平等にリソースを使用できるようにするとともに、全体のリソースに余裕がある場合でも、１コンテナが使用するリソースを所定の上限値に制限するリソース制御手段
を更に備えることを特徴とする第１項ないし第５項のうちいずれか１項に記載のコンテナ収容装置。
（第７項）
特定のユーザのプロセスを他のユーザのプロセスと隔離して動作させる仮想的な環境であるコンテナを収容するコンテナ収容装置が実行するコンテナ作成方法であって、
前記特定のユーザのコンテナの作成指示を受信した場合に、各ユーザのコンテナ作成において共通に使用されるモデルデータを用いて、前記特定のユーザのコンテナを作成するコンテナ作成ステップを備え、
前記コンテナ作成ステップにおいて、前記コンテナ収容装置は、前記コンテナの外部にある外部領域を、前記コンテナにおいて前記特定のユーザにより認識されるデータ領域に接続し、データが前記外部領域に格納されるようにする
ことを特徴とするコンテナ作成方法。
（第８項）
コンピュータを、第１項ないし第６項のうちいずれか１項に記載のコンテナ収容装置における各手段として機能させるためのプログラム。
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００８６】
１００  コンテナ収容装置
１１０  コンテナ管理部
１２０  テンプレート格納部
１３０  監視制御部
２００  管理装置
２１０  オーダー管理部
２２０  コンテナ収容装置管理部
２３０  テンプレート格納部
【図１】
0006749094.tif 000002
【図２】
0006749094.tif 000003
【図３】
0006749094.tif 000004
【図４】
0006749094.tif 000005
【図５】
0006749094.tif 000006
【図６】
0006749094.tif 000007
【図７】
0006749094.tif 000008
【図８】
0006749094.tif 000009
【図９】
0006749094.tif 000010
【図１０】
0006749094.tif 000011
【図１１】
0006749094.tif 000012