IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌ・シー・アール・コーポレイションの特許一覧

<>
  • 特開-画像組み立て 図1
  • 特開-画像組み立て 図2
  • 特開-画像組み立て 図3
  • 特開-画像組み立て 図4
  • 特開-画像組み立て 図5
  • 特開-画像組み立て 図6
  • 特開-画像組み立て 図7
  • 特開-画像組み立て 図8
  • 特開-画像組み立て 図9
  • 特開-画像組み立て 図10
  • 特開-画像組み立て 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024044966
(43)【公開日】2024-04-02
(54)【発明の名称】画像組み立て
(51)【国際特許分類】
   G06F 8/61 20180101AFI20240326BHJP
【FI】
G06F8/61
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2023012462
(22)【出願日】2023-01-31
(31)【優先権主張番号】17/949,546
(32)【優先日】2022-09-21
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
2.WINDOWS
3.UNIX
4.JAVA
5.docker
6.Kubernetes
7.Swarm
8.Mesos
9.runc
10.Ubuntu
(71)【出願人】
【識別番号】391007161
【氏名又は名称】エヌ・シー・アール・コーポレイション
【氏名又は名称原語表記】NCR CORPORATION
(74)【代理人】
【識別番号】100098589
【弁理士】
【氏名又は名称】西山 善章
(74)【代理人】
【識別番号】100147599
【弁理士】
【氏名又は名称】丹羽 匡孝
(72)【発明者】
【氏名】シモン ウォーターマン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA07
5B376AD27
5B376AE04
5B376AE12
5B376FA01
5B376FA04
(57)【要約】
【課題】異なるオペレーティングシステム(Linux、Windowsなど)及び異なるソフトウェアアプリケーションを有するSST(セルフサービス端末)やPOS端末でにおいても、SST又はPOS端末上で実行されているソフトウェアをアップグレード可能としたり、接続された周辺デバイスを変更することを可能とする。
【解決手段】ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを組み立てるためのコンピュータ実装方法であって、ソフトウェアコンテナ要素として実行するために、複数の事前定義されたモジュラー画像ファイルから実行可能な画像ファイルを組み立てるステップを含み、各事前定義されたモジュラー画像ファイルが、実行可能な命令を定義する少なくとも1つの層を含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを組み立てるためのコンピュータ実装方法であって、
ソフトウェアコンテナ要素として実行するために、複数の事前定義されたモジュラー画像ファイルから実行可能な画像ファイルを組み立てるステップを含み、各事前定義されたモジュラー画像ファイルが、実行可能な命令を定義する少なくとも1つの層を含む、方法。
【請求項2】
前記複数の事前定義されたモジュラー画像ファイルのうちの少なくとも1つの第1の事前定義されたモジュラー画像ファイル、及び前記複数の事前定義されたモジュラー画像ファイルのうちの少なくとも1つの第2の事前定義されたモジュラー画像ファイルから、前記実行可能な画像ファイルを組み立てることを更に含み、
それによって、前記第1の事前定義されたモジュラー画像ファイルのうちの少なくとも1つ又は各々が、実行可能な命令を定義する少なくとも1つの層を含み、前記実行可能な命令が、少なくとも1つの前記第2の事前定義されたモジュラー画像ファイルの少なくとも1つの層によって定義される実行可能な命令なしには、前記ソフトウェアコンテナ要素として実行することができない、請求項1に記載の方法。
【請求項3】
少なくとも1つの周辺デバイスドライバ画像ファイルとして、前記少なくとも1つの第1の事前定義されたモジュラー画像ファイルを提供することと、
少なくとも1つのベースオペレーティングシステム画像ファイル及び少なくとも1つのソフトウェア依存性画像ファイルとして、前記少なくとも1つの第2の事前定義されたモジュラー画像ファイルを提供することと、を更に含む、請求項2に記載の方法。
【請求項4】
スキャナドライバ画像ファイル、及び/又はプリンタドライバ画像ファイル、及び/又はスケールドライバ画像ファイル、及び/又はレーザスキャナドライバ画像ファイルとして、前記少なくとも1つの周辺デバイスドライバ画像ファイルを提供することを更に含む、請求項3に記載の方法。
【請求項5】
ドライバ層、及び/又は共通層、及び/又はユーティリティ層を含む、画像ファイルとして、前記ソフトウェア依存性画像ファイルを提供することを更に含む、請求項3又は4に記載の方法。
【請求項6】
前記実行可能な画像ファイルの実行に応答して、前記実行可能な画像ファイルによって定義された実行可能ソフトウェアを含み、かつコンピューティングデバイスの1つ以上のプロセッサ上で実行可能である、要素として、前記ソフトウェアコンテナ要素を提供することを更に含む、請求項5に記載の方法。
【請求項7】
コンピューティング環境に関係なく実行可能であるソフトウェアとして、前記実行可能なソフトウェアを提供することを更に含む、請求項6に記載の方法。
【請求項8】
前記ソフトウェアコンテナ要素を介して、隔離されたコンピューティング環境で、前記実行可能なソフトウェアを実行することを更に含む、請求項7に記載の方法。
【請求項9】
前記組み立ての前に、実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素を介して、前記ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを要求することを更に含む、請求項8に記載の方法。
【請求項10】
前記実行可能な画像ファイルについての前記要求を、コンテナ画像レジストリ、又はコンテナランタイム要素及び前記コンテナ画像レジストリと通信するように構成されたプロキシに送信することを更に含む、請求項9に記載の方法。
【請求項11】
前記コンテナ画像レジストリ及び/又は前記プロキシが、コンピューティングデバイス及び/又は少なくとも1つのサーバ上のローカルメモリに記憶されている、請求項10に記載の方法。
【請求項12】
前記コンテナエンジン要素で、前記実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義するコンテナ画像マニフェストを受信することを更に含む、請求項11に記載の方法。
【請求項13】
前記コンテナエンジン要素及び前記コンテナ画像レジストリと通信するように構成されたプロキシから、前記コンテナ画像マニフェストを受信することを更に含む、請求項12に記載の方法。
【請求項14】
前記コンテナ画像マニフェストの受信に応答して、前記コンテナエンジン要素を介して、前記実行可能な画像ファイルを組み立てることを更に含む、請求項13に記載の方法。
【請求項15】
前記コンテナエンジン要素で、コンテナ画像レジストリから前記実行可能な画像ファイルを組み立てるために必要な各事前定義されたモジュラー画像ファイルを受信することと、
前記実行可能な画像ファイルを組み立てることと、を更に含む、請求項14に記載の方法。
【請求項16】
実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、前記実行可能なソフトウェアが、実行されたときに、
ソフトウェアコンテナ要素として実行するために、複数の事前定義されたモジュラー画像ファイルから、実行可能な画像ファイルを組み立てるように構成されており、各事前定義されたモジュラー画像ファイルが、実行可能な命令を定義する少なくとも1つの層を含む、コンピューティングデバイス。
【請求項17】
前記コンピューティングデバイスが、ポイントオブセール端末又はセルフサービス端末である、請求項16に記載のコンピューティングデバイス。
【請求項18】
ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを組み立てるためのコンピュータ実装方法であって、
実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素から、実行可能な画像ファイルについての要求を受信するステップと、
前記実行可能な画像ファイルを組み立てるために使用可能な複数の事前定義されたモジュラー画像ファイルの各々がメモリ内でアクセス可能であると判定することに応答して、前記実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義するコンテナ画像マニフェストを、前記実行可能な画像ファイルを組み立てるための前記コンテナエンジン要素に提供するステップと、を含む、コンピュータ実装方法。
【請求項19】
実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、前記実行可能なソフトウェアが、実行されたときに、
実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素から、実行可能な画像ファイルについての要求を受信し、かつ
前記実行可能な画像ファイルを組み立てるために使用可能な複数の事前定義されたモジュラー画像ファイルの各々がメモリ内でアクセス可能であると判定することに応答して、前記実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義するコンテナ画像マニフェストを、前記実行可能な画像ファイルを組み立てるための前記コンテナエンジン要素に提供するように構成されている、コンピューティングデバイス。
【請求項20】
命令を含むコンピュータプログラムであって、前記命令が、コンピューティングデバイスによって実行されたときに、前記コンピューティングデバイスに、請求項1、16、18又は19において定義される方法のステップを行わせる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアコンテナとして実行するために実行可能な画像ファイルを組み立てるための方法及びコンピューティングデバイスに関する。
【0002】
特に、本発明は、特定のセルフサービス端末又はポイントオブセール端末のニーズに従って、実行可能な画像ファイルを動的に組み立てるための方法論に関するが、これに限定されない。ここで、実行可能な画像ファイルは、複数の事前定義されたモジュラー画像ファイルから組み立てられ、各々が、実行可能な画像ファイル全体を構成するために必要な実行可能な命令を表す特定の層を有する。
【背景技術】
【0003】
セルフサービス端末(SST)及び/又はポイントオブセール(POS)端末は、小売業界で適宜、使用されることが知られている。SST及びPOS端末は、通常、顧客が小売施設と取引を行うことを可能にするために使用される。任意の小売施設の各SST又はPOS端末を、異なる周辺デバイスに接続することができる。
【0004】
各SST又はPOS端末はまた、異なる基礎となるオペレーティングシステム(Linux、Windowsなど)及び異なるソフトウェアアプリケーションを有するなどの、異なるソフトウェアを実行し得る。これは通常、SST又はPOS端末が使用される小売施設、及び小売施設におけるSST又はPOS端末の使用目的に依存する。適宜、SST又はPOS端末上で実行されているソフトウェアをアップグレードすることもでき、又は接続された周辺デバイスを変更することができる。
【0005】
端末間で頻繁に存在するばらつきのため、ソフトウェア開発者は、SST又はPOS端末上で実行する必要のあるソフトウェアを包含するソフトウェアコンテナを使用し始めている。ソフトウェアコンテナは、走るソフトウェアを隔離するので、複雑なプラットフォーム依存性を回避するのに役立つ。つまり、ソフトウェアコンテナは、端末のコンピューティング環境に関係なく、端末の1つ以上のプロセッサ上で実行することができる。
【0006】
これは、ソフトウェアコンテナがソフトウェア(アプリケーションコード及び任意のソフトウェア依存性)の全てを包含し、任意のコンピューティング環境で実行可能である必要があるためである。更に、これらのコンテナは独自の隔離されたコンピューティング環境で動作するため(ソフトウェアコンテナの外側にある他のソフトウェア/ハードウェアとのある特定の事前定義された通信経路(特定のファイル、特定のポートへのアクセスなど)は例外)、これによりまた、当該コンテナが特に安全になる。
【0007】
このように、ソフトウェアコンテナは、SST及びPOS端末上で使用するためのソフトウェアをパッケージング及び配信する効果的な方法である。ソフトウェア又はハードウェアのアップグレードが端末上で行われると、これらのアップグレードを構成する新しいソフトウェアコンテナが端末上で実行され得る。
【0008】
また、コンテナが事前構築され得るので、これは、あらゆる端末上での複雑な構築を回避するのに役立つ場合がある。ソフトウェアコンテナは、コンピューティングデバイス上にハイパーバイザをインストールする必要がないという点において、仮想マシンとは異なることが留意される。ソフトウェアコンテナはまた、通常、仮想マシンよりも軽量であり、かつ仮想マシンよりも速く走る。
【0009】
更に、仮想マシンはコンピュータシステム全体を仮想化するのに対し、ソフトウェアコンテナはオペレーティングシステムを仮想化する。ソフトウェアコンテナはまた、単一のオペレーティングシステムを共有するが、各仮想マシンは独自のオペレーティングシステムを有する。
【0010】
ソフトウェアコンテナを展開する場合、(docker、RKT、CRI-O、及びLXDなどのような)コンテナエンジンが利用される。コンテナエンジンは、ユーザ要求、又は(Kubernetes、Swarm、Mesosなどのような)コンテナオーケストレータのAPIサーバからの要求を受け入れ、レジストリから(特定の画像形式の)画像ファイルを引き出し、コンテナマウントポイントを準備し、ソフトウェアコンテナを実行するのに必要なメタデータを準備し、かつコンテナランタイムを呼び出すことができる。
【0011】
コンテナランタイムは、コンテナエンジンの一部である。コンテナランタイム(runc、containerd、crun、railcar、katacontainersなどのような)は、コンテナ画像ファイルを実行し、かつそれによって、ソフトウェアコンテナを作成するために、マウントポイント、及びコンテナエンジンによって提供されるメタデータを使用し、コンピューティングデバイス上で走る(ホストOSの)カーネルと通信する。
【0012】
複数のコンピューティングデバイスにわたって複数のコンテナを実装する場合、ソフトウェアコンテナのオーケストレータプラットフォームがよく使用される。これらのプラットフォームは、複数のコンピューティングデバイス(例えば、SST又はPOS端末)にわたってコンテナのワークロードをスケジュールすることができ、かつまた、標準化されたアプリケーション定義ファイル(例えば、kube YAML、docker composeなど)を提供することができる。
【0013】
Kubernetesは、コンテナオーケストレーションプラットフォームの一例である。ここで、Kubernetesコンテナオーケストレーションプラットフォームは、クラスタを管理する、Kubernetesマスタと呼ばれる制御ユニットを含む、ユニットのクラスタ、及びワークロード(コンテナ)を走らせる少なくとも1つのノード(又はワーカ)である。
【0014】
Kubernetesオーケストレータプラットフォームの1つの部分は、kubeletである。kubeletは、Kubernetesシステムの一部である、あらゆるワーカ上で走るエージェントである。動作中、kubeletは、どのコンテナをコンピューティングデバイス上で走らせるべきかをkubeletに通知する(Kubernetesマスタ上のAPIサーバからの)コマンドを受信する。
【0015】
Kubernetesでは、これらのコンテナは、「ポッド」内に提供される。通常、単一のポッドは、単一のコンテナを含むが、ポッド内に複数のコンテナを含むことが可能である。kubeletは、コンテナエンジン内のコンテナランタイムを介してソフトウェアコンテナを実行するために、どのコンテナをコンピューティングデバイス上で走らせるべきかに関する情報を(例えば、コンテナランタイムインターフェース(CRI)を介して)コンテナエンジンに渡す。
【0016】
コンテナランタイムが、実行可能なコンテナ画像ファイルを実行すると、ソフトウェアコンテナが作成される。そのため、ソフトウェアコンテナは本質的に、関連付けられた実行可能なコンテナ画像ファイルのランタイムインスタンスである。
【0017】
この意味で、実行可能なコンテナ画像ファイルは、ソフトウェアコンテナ要素として少なくとも実行可能である必要があるソフトウェアの全てを有する画像ファイルである。より詳細には、コンテナ画像ファイルは通常、ソフトウェアコンテナの必要性及び能力を記述する任意のメタデータに加えて、ソフトウェアコンテナを走らせるための全ての必要な要件を含むバイナリファイルである。
【0018】
コンテナ画像ファイル自体は、ソフトウェアコンテナを走らせるために必要な実行可能な命令を定義するいくつかの層から構成される。例えば、コンテナ画像ファイルは、ソフトウェアアプリケーションの実行可能なコードを定義するいくつかの層、ソフトウェアアプリケーションが依存する任意のソフトウェア依存性に対するコードを定義するいくつかの層、及び任意の必要な構成設定に対するコードを定義するいくつかの層を含み得る。
【0019】
コンテナ画像ファイルは、多くの場合、コンテナ画像レジストリに記憶される。各コンテナ画像ファイルは、コンテナ画像ファイル内の層及びメタデータを定義する特定のコンテナ画像形式で記憶される。例えば、オープンコンテナイニシアチブ(OCI)画像形式は、各層のtarファイル、及び画像ファイルに関連付けられたメタデータを指定するJSON形式のマニフェストファイルとして、画像ファイルを定義する。
【0020】
SST及びPOS端末上にソフトウェアコンテナを配備する場合、特定の端末のニーズに応じて、エンドユーザ(例えば、小売施設に関連するスタッフ)によってカスタマイズしたコンテナ画像がゼロから構築される場合、これにより、コンテナの構築方法に関する知識が必要以上に伝播される可能性が生じ、構築プロセス中に問題が発生すると、期待通りに機能しないコンテナ画像がもたらされるリスクが生じる。このアプローチを取ることはまた、現実世界の変化にうまく適合しないことが多く、これは、新しいコンテナ画像を構築することによってのみ適合可能である。
【0021】
したがって、事前に構築されたコンテナ画像ファイルは、事前に準備することができる。任意の端末のために機能すべき事前に構築されたコンテナ画像ファイルをユーザに提供するために、任意の所与の端末上で走るハードウェア/ソフトウェアから独立して、必要となる可能性があり得る全てのソフトウェアを含む、単一のコンテナ画像ファイルを作成することができる。あるいは、端末上で必要とされ得る全ての可能なソフトウェアからの可能なソフトウェアのサブセットの順列を含む、各固有の画像ファイルを含む、一連の固有のコンテナ画像ファイルを作成してもよい。
【0022】
しかしながら、単一のコンテナ画像ファイルを作成することは、リソース(ディスク、RAMなど)の観点から最適ではないコンテナ(ひいては、走っているコンテナ)画像を結果として生じるという問題を呈する。例えば、端末に接続可能な10個の特定の周辺デバイスの各々に異なるコード部分が必要な場合、ソフトウェアコンテナ画像ファイルには、特定の端末上で走るハードウェア/ソフトウェアから独立した、必要な全てが確実に含まれるようにするために、コードの10個の部分を全て画像ファイルに含める必要がある。
【0023】
この結果、多くの端末(例えば、1つの周辺デバイスのみを持つ端末)に対して必要よりもはるかに大きいサイズのコンテナ画像ファイルがもたらされる。このようなサイズを有することは、画像ファイルがダウンロード及びアップグレードされ得る速度、並びにコンテナを走らせる速度が、コンテナ画像ファイルに特定の端末に必要なコードのみが含まれている場合よりも遅くなることをもたらし得る。現実には、端末に接続できる多数の異なる周辺デバイス(10個超)があるため、事前に構築された単一画像ファイルのサイズは、著しく大きくなければならない場合がある。
【0024】
特定の端末上で必要なソフトウェアの各実世界の順列に対して、コンテナ画像ファイルが作成される場合、これは、多くのコンテナ画像を構築、配布、及び管理する必要があり得るという問題を呈する。
【0025】
例えば、端末に接続可能な10個の特定の周辺デバイスの各々に、異なるコード部分が必要な場合、各実世界の組み合わせに対してカスタム画像ファイルが確実に存在するようにするために、コードの10個の部分のサブセット(例えば、画像1-部分1、画像2-部分1+画像2、画像3-部分1+部分3など)の順列を含む固有の画像ファイルを各々作成する必要がある。これにより、約1000個の異なる画像ファイルがもたらされる。実際には、端末に接続することができる多数の異なる周辺デバイス(10個超)があるため、必要となる固有のコンテナ画像の数は、1000個をはるかに超える可能性がある。
【0026】
小売店舗のリソース制約のある「エッジ」環境では、これらのアプローチのいずれも許容できない。
【発明の概要】
【0027】
本発明の目的は、上述の問題のうちの1つ以上を少なくとも部分的に軽減することである。
【0028】
本発明のある特定の実施形態の目的は、ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを動的に組み立てることを助けることである。
【0029】
本発明のある特定の実施形態の目的は、各端末設置(端末タイプ、周辺デバイスセット、製品など)に対して特定のコンテナ画像を構築する必要を回避することを助けることである。
【0030】
本発明のある特定の実施形態の目的は、SST又はPOS端末の特定のニーズに従ってコンテナ画像ファイルを組み立てる方法を最適化することを助けることである。
【0031】
本発明のある特定の実施形態の目的は、端末上のハードウェア又はソフトウェアのいくつかの変化に素早く適合し得る画像ファイルを組み立てる方法を提供することを助けることである。
【0032】
本発明のある特定の実施形態の目的は、複数の事前定義されたモジュラー画像ファイルを含むコンテナレジストリを提供することを助けることであり、各モジュラー画像ファイルは、SST又はPOS端末上で実行されるべきソフトウェアコンテナとして実行するために実行可能な画像ファイル内で必要とされ得る実行可能な命令を含む、単一の層を含む。
【0033】
本発明のある特定の実施形態の目的は、複数の事前定義されたモジュラー画像ファイルを提供することを助けることであり、各それぞれのモジュラー画像ファイルは、SST及び/又はPOS端末に接続可能であるそれぞれの周辺デバイスと通信するための実行可能な命令を定義する少なくとも1つの層を含む。
【0034】
本発明のある特定の実施形態の目的は、コンテナエンジンとコンテナレジストリとの間に通信的に配置されるプロキシを提供することを助けることであり、そのプロキシは、コンテナエンジンが複数の事前定義されたモジュラー画像ファイルから実行可能な画像ファイルを組み立てることを可能にする、コンテナ画像マニフェストを作成するように構成されている。
【0035】
本発明のある特定の実施形態の目的は、コンテナエンジン及びコンテナレジストリと通信するプロキシを提供することを助けることであり、そのプロキシは、コンテナ要件に従って、「オンザフライで」コンテナ画像のマニフェストを動的に作成するように構成されている。
【0036】
本発明の第1の態様によれば、ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを組み立てるためのコンピュータ実装方法であって、ソフトウェアコンテナ要素として実行するために、複数の事前定義されたモジュラー画像ファイルから、実行可能な画像ファイルを組み立てるステップを含み、各事前定義されたモジュラー画像ファイルが、実行可能な命令を定義する少なくとも1つの層を含む、コンピュータ実装方法が提供される。
【0037】
適切には、方法は、上記複数の事前定義されたモジュラー画像ファイルのうちの少なくとも1つの第1の事前定義されたモジュラー画像ファイル、及び上記複数の事前定義されたモジュラー画像ファイルのうちの少なくとも1つの第2の事前定義されたモジュラー画像ファイルから、実行可能な画像ファイルを組み立てることを更に含み、それによって、上記第1の事前定義されたモジュラー画像ファイルのうちの少なくとも1つ又は各々は、実行可能な命令を定義する少なくとも1つの層を含み、実行可能な命令は、少なくとも1つの上記第2の事前定義されたモジュラー画像ファイルの少なくとも1つの層によって定義される実行可能な命令なしには、ソフトウェアコンテナ要素として実行することができない。
【0038】
適切には、方法は、少なくとも1つの周辺デバイスドライバ画像ファイルとして、少なくとも1つの第1の事前定義されたモジュラー画像ファイルを提供することと、少なくとも1つのベースオペレーティングシステム画像ファイル及び少なくとも1つのソフトウェア依存性画像ファイルとして、少なくとも1つの第2の事前定義されたモジュラー画像ファイルを提供することと、を更に含む。
【0039】
適切には、方法は、スキャナドライバ画像ファイル及び/若しくはプリンタドライバ画像ファイル並びに/又はスケールドライバ画像ファイル及び/若しくはレーザスキャナドライバ画像ファイルとして、少なくとも1つの周辺デバイスドライバ画像ファイルを提供することを更に含む。
【0040】
適切には、方法は、ドライバ層及び/又は共通層及び/又はユーティリティ層を含む画像ファイルとして、ソフトウェア依存性画像ファイルを提供することを更に含む。
【0041】
適切には、方法は、実行可能な画像ファイルの実行に応答して、実行可能な画像ファイルによって定義された実行可能ソフトウェアを含み、かつコンピューティングデバイスの1つ以上のプロセッサ上で実行可能である要素として、ソフトウェアコンテナ要素を提供することを更に含む。
【0042】
適切には、方法は、コンピューティング環境に関係なく実行可能であるソフトウェアとして、実行可能なソフトウェアを提供することを更に含む。
【0043】
適切には、方法は、ソフトウェアコンテナ要素を介して、隔離されたコンピューティング環境で実行可能なソフトウェアを実行することを更に含む。
【0044】
適切には、方法は、組み立ての前に、実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素を介して、ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを要求することを更に含む。
【0045】
適切には、方法は、実行可能な画像ファイルについての要求を、コンテナ画像レジストリ、又はコンテナランタイム要素及びコンテナ画像レジストリと通信するように構成されたプロキシに送信することを更に含む。
【0046】
適切には、コンテナ画像レジストリ及び/又はプロキシは、コンピューティングデバイス及び/又は少なくとも1つのサーバ上のローカルメモリに記憶されている。
【0047】
適切には、方法は、コンテナエンジン要素で、実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義する、コンテナ画像マニフェストを受信することを更に含む。
【0048】
適切には、方法は、コンテナエンジン要素及びコンテナ画像レジストリと通信するように構成されたプロキシから、コンテナ画像マニフェストを受信することを更に含む。
【0049】
適切には、方法は、コンテナ画像マニフェストの受信に応答して、コンテナエンジン要素を介して、実行可能な画像ファイルを組み立てることを更に含む。
【0050】
適切には、方法は、コンテナエンジン要素で、コンテナ画像レジストリから実行可能な画像ファイルを組み立てるために必要な各事前定義されたモジュラー画像ファイルを受信することと、実行可能な画像ファイルを組み立てることと、を更に含む。
【0051】
本発明の第2の態様によれば、実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、実行可能なソフトウェアが、実行されたときに、ソフトウェアコンテナ要素として実行するために、複数の事前定義されたモジュラー画像ファイルから、実行可能な画像ファイルを組み立てるように構成されており、各事前定義されたモジュラー画像ファイルが、実行可能な命令を定義する少なくとも1つの層を含む、コンピューティングデバイスが提供される。
【0052】
適切には、コンピューティングデバイスは、ポイントオブセール端末又はセルフサービス端末である。
【0053】
本発明の第3の態様によれば、ソフトウェアコンテナ要素として実行するために実行可能な画像ファイルを組み立てるためのコンピュータ実装方法であって、コンピュータ実装方法が、実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素から、実行可能な画像ファイルについての要求を受信するステップと、実行可能な画像ファイルを組み立てるために使用可能な複数の事前定義されたモジュラー画像ファイルの各々がメモリ内でアクセス可能であると判定することに応答して、実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義するコンテナ画像マニフェストを、実行可能な画像ファイルを組み立てるためのコンテナエンジン要素に提供するステップと、を含む、コンピュータ実装方法が提供される。
【0054】
本発明の第4の態様によれば、実行可能なソフトウェアを実行するように構成された1つ以上のプロセッサを備えるコンピューティングデバイスであって、実行可能なソフトウェアが、実行されたときに、実行可能な画像ファイルを実行するように構成されたコンテナエンジン要素から、実行可能な画像ファイルについての要求を受信し、かつ実行可能な画像ファイルを組み立てるために使用可能な複数の事前定義されたモジュラー画像ファイルの各々がメモリ内でアクセス可能であると判定することに応答して、実行可能な画像ファイル内に含まれるべき各事前定義されたモジュラー画像ファイルを定義するコンテナ画像マニフェストを、実行可能な画像ファイルを組み立てるためのコンテナエンジン要素に提供するように構成されている、コンピューティングデバイスが提供される。
【0055】
本発明の第5の態様によれば、命令を含むコンピュータプログラムであって、命令が、コンピューティングデバイスによって実行されたときに、コンピューティングデバイスに、本発明の第1の態様又は第3の態様によって定義される方法のステップを行わせる、コンピュータプログラムが提供される。
【0056】
本発明のある特定の実施形態は、SST又はPOS端末上で実行されるべきソフトウェアコンテナのニーズに従って、「オンザフライで」コンテナ画像ファイルを組み立てるための方法論を提供することを助ける。
【0057】
本発明のある特定の実施形態は、実行可能な画像ファイルを組み立てるために使用可能である複数の事前定義されたモジュール画像ファイルを提供することを助け、複数の事前定義されたモジュール画像ファイルの各々は、実行可能な命令を定義する単一の画像層を含む。
【0058】
本発明のある特定の実施形態は、SST又はPOS端末上で実行されるべきソフトウェアコンテナの要件に従って必要とされる実行可能な命令を定義する複数の画像層を有する実行可能な画像ファイルを提供することを助ける。実行可能な画像ファイルの各それぞれの画像層は、それぞれの事前定義されたモジュラー画像ファイル内に含まれる単一の層に対応する。
【0059】
本発明のある特定の実施形態は、コンテナエンジンが、コンテナレジストリ内に記憶された複数の事前定義されたモジュラー画像ファイルから実行可能な画像ファイルを組み立てることを可能にする、コンテナ画像マニフェストを提供することを助ける。
【0060】
本発明のある特定の実施形態は、ソフトウェアを実行するコンピューティングデバイスを提供し、それによって、実行可能な画像ファイルの組み立てをもたらすことを助ける。
【0061】
本発明のある特定の実施形態は、ソフトウェアを実行するコンピューティングデバイスを提供し、それによって、実行可能な画像ファイルの組み立てを可能にするコンテナ画像マニフェストの提供をもたらすことを助ける。
【0062】
本発明のある特定の実施形態は、特定の端末に対して固有の画像ファイル又は任意の端末上で必要とされ得る全てのソフトウェアを有する画像ファイルを有する必要性を回避する、特定のSST又はPOS端末のソフトウェア/ハードウェア要件に従って実行可能な画像ファイルを動的に組み立てるための方法論を提供することを助ける。
【0063】
ここで、本発明の実施形態を、例としてのみ、添付図面を参照して以降で説明する。
【0064】
図面では、同様の参照番号は同様の部品を指す。
【図面の簡単な説明】
【0065】
図1】コンピューティングシステムを示す。
図2】Kubernetesオーケストレーションプラットフォームの制御下にあるコンピューティングシステムを示す。
図3】いくつかのソフトウェアコンテナを実行するセルフサービス端末のためのハードウェア及びソフトウェアアーキテクチャを示す。
図4】セルフサービス端末上で実行されるソフトウェアコンテナ要素を示す。
図5】複数のセルフサービス端末と通信するサーバ上で実行されるソフトウェアを示す。
図6】実行可能な画像ファイルの層を示す。
図7】事前定義されたモジュラー画像ファイルからの実行可能な画像ファイルの組み立てを示す。
図8】画像ファイルの要求がどのように処理されるかを示す、コンピューティングシステムを示す。
図9】サードパーティ周辺デバイスがセルフサービス端末に接続されている、コンピューティングシステムを示す。
図10】サードパーティ周辺デバイスがセルフサービス端末に接続されている、別のコンピューティングシステムを示す。
図11】実行可能な画像ファイルが、事前定義されたモジュラー画像ファイルからどのように組み立てられるかを説明する、フローチャートを示す。
【発明を実施するための形態】
【0066】
図1は、コンピューティングシステム100を示す。コンピューティングシステム100には、3つのセルフサービス端末(SST)1101、1102、1103がある。
【0067】
SSTは、コンピューティングデバイスの一例である。本発明のある特定の他の実施形態では、コンピューティングデバイスは、ポイントオブセール(POS)端末、現金自動預け払い機(ATM)、パーソナルコンピュータ、ラップトップ、タブレットなどであってもよい。各SSTは、1つ以上のプロセッサ112、及び少なくとも1つのメモリ114を含む。メモリは、非一時的コンピュータ可読記憶媒体である。
【0068】
メモリ114は、SSTのプロセッサ112によって実行可能である実行可能なソフトウェアを記憶する。各SSTはまた、サーバと通信するための通信インターフェース(図示せず)、及び接続された周辺デバイスと通信するための1つ以上の通信インターフェース(図示せず)を含み得る。
【0069】
図1に示されるシステムでは、スキャナ周辺デバイス1201及びスケール周辺デバイス1202が、第1のSST1101に接続されている。また、プリンタ周辺デバイス1203及びスキャナ周辺デバイス1204が、第2のSST1102に接続されている。また、スケール周辺デバイス1205、プリンタ周辺デバイス1206、及びスキャナ周辺デバイス1207が、第3のSST1103に接続されている。本発明のある特定の他の実施形態では、各SSTは、周辺デバイスの異なる組み合わせに接続され得ることが理解されよう。
【0070】
各周辺デバイスは、有線インターフェース122を介して接続されるSSTと通信し得る。本発明のある特定の他の実施形態では、インターフェースは、無線、又は有線と無線との組み合わせであってもよいことが理解されよう。
【0071】
各SSTは、ネットワーク140を介してサーバ130と通信する。サーバもまた、コンピューティングデバイスの一例である。ネットワーク140は、有線、無線、又は有線と無線との組み合わせであってもよい。
【0072】
サーバ130もまた、1つ以上のプロセッサ132、及び少なくとも1つのメモリ134を含む。メモリ134もまた、非一時的コンピュータ可読記憶媒体である。メモリ134は、サーバのプロセッサによって実行可能である実行可能なソフトウェアを記憶する。SST及びサーバの実行可能なソフトウェアについて、以下でより詳細に説明する。
【0073】
図2は、コンピューティングシステム200を示す。コンピューティングシステムは、Kubernetesコンテナオーケストレーションプラットフォームの制御下にある、いくつかのコンポーネントを有する。
【0074】
そのため、本システムは、Kubernetesクラスタと称され得る。Kubernetesクラスタは、Kubernetesマスタ215を走らせるサーバ210と、それぞれのKubernetesワーカ2301、2302を走らせるセルフサービス端末(SST)2201、2202と、を含む。
【0075】
サーバ210は、物理サーバであっても、クラウドサーバであってもよいことが理解されよう。サーバ210及びSSTは、ローカルエリアネットワーク又はインターネットなどの、ネットワーク205を経由して通信する。ネットワークは、有線及び/又は無線であってもよい。SST以外のデバイスをネットワークに接続して、Kubernetesワーカを走らせることができることが理解されよう。
【0076】
サーバ210上で走るKubernetesマスタ215は、Kubernetesクラスタを管理するAPIサーバ216を含む。APIサーバ216は、マスタ215の他の内部コンポーネントから受信する情報に基づいてコマンドを発行し、かつKubernetesワーカ2301、2302上で走るkubectl212及びkubelet(SST2 2202上のkubelet231など)などの外部コンポーネントとインターフェース接続する。
【0077】
Etcd217は、クラスタの構成などの情報を記憶するKubernetesクラスタのための配信データベースである。Etcd217はまた、Kubernetesワーカ2301、2302の望ましい状態、及びKubernetesワーカ2301、2302の実際の状態を記憶する。ある状態は、クラスタ内の各Kubernetesワーカ2301、2302上で走っている、ポッド(SST2 2202上のポッド3 235など)及びポッドのコンテナ(ポッド235のコンテナ236など)の指標であると理解され得る。
【0078】
スケジューラ218は、新しいポッドをKubernetesワーカ上でいつ走らせるかを監視し、次いで、当該ポッドをどのKubernetesワーカ上に展開するかを決定する。コントローラマネージャ219は、etcd217に対して指定された望ましい状態に近づくようにKubernetesワーカ2301、2302の実際の状態を移動させることを試みるコントローラプロセスを走らせる。
【0079】
マスタ215はまた、kubectl212、APIサーバ216を介してKubernetesクラスタと通信するためのコマンドラインツール、及びオペレータインターフェース211を含む。
【0080】
Kubernetesクラスタ内に位置する各Kubernetesワーカ2301、2302は、SST上で走る。本発明のある特定の実施形態によれば、ワーカは、SSTの仮想マシン上で走らせることができる。ワーカ230は、ネットワーク205を介して、他のワーカ230及びマスタ215と通信することができる。
【0081】
各ワーカ230は、ワーカ230の動作を管理するkubeletを有する。kubelet(SST2202上のkubelet231など)は、ワーカ2302の他のコンポーネントにコマンドを発行し、ワーカ(ポッド235など)及びワーカのコンテナ(コンテナ236など)上で走るポッドを監視し、かつAPIサーバ216と通信する。kubelet231は、展開ファイルを受信し、これらの展開ファイルに記述されたコンテナ236が走っており、かつ正常であることを保証する。
【0082】
kube-proxy(kube-proxy232など)は、ポッドが、同じKubernetesワーカ及び異なるワーカの両方で通信することを可能にする、ネットワークプロキシである。コンテナエンジン(エンジン233など)は、コンテナを走らせ、かつ管理して、kubeletからのコマンド、及びレジストリからのコンテナ画像を受信する。
【0083】
コンテナエンジンは、内部にランタイムが位置するKubernetesワーカ内のコンテナを走らせることに関与するコンテナランタイム(コンテナランタイム234など)に渡されるコンテナメタデータを準備する。
【0084】
Kubernetesマスタ215のAPIサーバ216によってポッドがKubernetesワーカに展開された後、任意のKubernetesワーカ内にポッドが存在する。ポッドは一般に単一のコンテナを含むが、ポッドは、ストレージ及びネットワークリソースを共有することになる、類似の機能を有する複数のコンテナを含み得る。
【0085】
ポッドは、kubeletを介して、ワーカが利用可能な特定のリソースへのアクセスを要求するか、又はkube-proxyを使用することによって、他のポッドと通信することができる。
【0086】
図3は、いくつかのソフトウェアコンテナ要素を実行するように構成されたセルフサービス端末のためのハードウェア及びソフトウェアアーキテクチャ300を示す。
【0087】
図3では、基礎となるハードウェアは、SST310である。これは、図1又は図2に関して記述されるSSTのうちの1つであってもよい。上述のように、SSTは、1つ以上のプロセッサ、及び少なくとも1つのメモリを含む。メモリは、プロセッサによって実行可能である実行可能なソフトウェアを記憶する。
【0088】
実行可能なソフトウェアには、(Unix、Ubuntuなどのような)ホストオペレーティングシステムの一部であってもよい、Linuxカーネル320が含まれる。本発明のある特定の他の実施形態では、他のカーネル及び他のホストオペレーティングシステム(Windows、Macなど)を利用することができることが理解されよう。実行可能なソフトウェアの一部として、コンテナエンジン330も含まれる。
【0089】
コンテナエンジンは、ユーザ要求、又は(Kubernetes、Swarm、Mesosなどのような)コンテナオーケストレータのAPIサーバからの要求を受け入れ、レジストリから(特定の画像形式の)画像ファイルを引き出し、コンテナマウントポイントを準備し、ソフトウェアコンテナを実行するのに必要なメタデータを準備し、かつコンテナランタイムを呼び出すことに関与する。
【0090】
コンテナランタイム(図示せず)は、コンテナエンジンの一部である。コンテナランタイム(runc、containerd、crun、railcar、katacontainersなどのような)は、いくつかのコンテナ画像ファイルを実行し、かつそれによって、いくつかのソフトウェアコンテナを作成するために、マウントポイント、及びコンテナエンジンによって提供されるメタデータを使用し、コンピューティングデバイス上で走っているLinuxカーネル320と通信する。
【0091】
図3に示されるソフトウェアコンテナの各々についての実行可能な画像ファイルは、本明細書に記載されるように組み立てられ得る。組み立てたら、それらは、SST上のメモリに記憶され得る。図3では、4つのソフトウェアコンテナ要素が示されている。第1のソフトウェアコンテナ要素340は、デバイスサーバコンテナと称される。
【0092】
デバイスサーバコンテナは、アプリケーションソフトウェア342、並びに関連付けられたバイナリ及びライブラリ344を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。デバイスサーバコンテナ内で走るアプリケーションは、低いレベルで、SSTに接続された周辺デバイスのうちの1つ以上を制御すること、構成すること、又は別様に当該周辺デバイスにアクセスすること、並びにネットワークを横切って、SSTの他のコンポーネントに事業レベルの機能を公開することに関与する。
【0093】
例えば、デバイスサーバは、「USB」プロトコルを介して、スキャナ(低レベル)と通信し、スキャンされたバーコード(事業レベル)を他のコンポーネントに報告し得る。
【0094】
デバイスサーバコンテナ内のソフトウェアは、周辺デバイスパスにアクセスし、ひいては、周辺デバイスを使用するか、又は周辺デバイスと相互作用することができる。第2のソフトウェアコンテナ要素350は、INITコンテナと称される。INITコンテナは、アプリケーションソフトウェア352、並びに関連付けられたバイナリ及びライブラリ354を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。
【0095】
INITコンテナで走る実行されるアプリケーションは、そのポッド内で初期化されてから、メイン(INITではない)コンテナを開始する。INITコンテナは、Kubernetesシステムの概念であるが、最初に(すなわち、他のコンテナの前に)実行されるように構成されたコンテナもまた、他のコンテナオーケストレーションプラットフォームにおいて利用され得ることが理解されよう。
【0096】
第3のソフトウェアコンテナ要素360は、エンドポイントコンテナと称される。エンドポイントコンテナは、アプリケーションソフトウェア362、並びに関連付けられたバイナリ及びライブラリ364を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。
【0097】
エンドポイントコンテナ内で走るアプリケーションにより、マザーボードのユニバーサル固有識別子(UUID)などの、SSTに関する情報が、Kubernetesクラスタの残りの部分に対して利用可能になる。
【0098】
第4のソフトウェアコンテナ要素370は、デバイスプラグインコンテナと称される。デバイスプラグインコンテナは、アプリケーションソフトウェア372、並びに関連付けられたバイナリ及びライブラリ374を含む(バイナリ及びライブラリは、ソフトウェア依存性と称され得る)。デバイスプラグインコンテナ内で走るアプリケーションは、どの周辺デバイスがSSTに接続されているかを知らせることに関与する。
【0099】
図3に見ることができるように、各ソフトウェアコンテナ要素は、独自のバイナリ及びライブラリ(bin/lib)を有する。しかしながら、本発明のある特定の他の実施形態によると、コンテナの任意の組み合わせは、bin/libを共有し得ることが理解されよう。
【0100】
ここで図4を参照すると、セルフサービス端末400、及びセルフサービス端末上で実行されるように構成された(SSTの1つ以上のプロセッサ上にある)ソフトウェアコンテナ要素が示されている。
【0101】
SST上のソフトウェアコンテナの各々は、(画像ファイルによって定義される)実行可能なソフトウェアを包含する。実行可能なソフトウェアは、隔離されたコンピューティング環境でソフトウェアが実行されるような方法で、コンテナ内で実行される。
【0102】
ソフトウェアは、動作するためにSST上で同様に実行される他のソフトウェアコンテナのいずれにも依存しないという意味において、隔離されている。ソフトウェアは、独自のコンピューティング環境で効果的に実行され、かつ事前定義された通信経路を介して、この環境の外側にあるハードウェア/ソフトウェアと通信する。
【0103】
ソフトウェアコンテナ内に実行可能なソフトウェアを提供することは、コンピューティング環境に関係なくソフトウェアを実行することができることを意味する。
【0104】
図4では、コンテナは、Kubernetesコンテナオーケストレーションプラットフォームを使用して管理されている。図4に示されるSSTは、上記の図1図3のいずれかを参照して説明されるSSTであってもよい。
【0105】
SST400は、ホストオペレーティングシステムの一部としてLinuxカーネル405を走らせる。当然のことながら、本発明のある特定の他の実施形態に従って、他のオペレーティングシステムを使用することができる。
【0106】
Kubernetesシステムを使用して、セルフサービス端末は、Kubernetesワーカ410と称されるソフトウェアを実行する。Kubernetesワーカは、また、ノードと称されることもある。
【0107】
第1のソフトウェアコンテナ要素420、第2のソフトウェアコンテナ要素430、第3のソフトウェアコンテナ要素440、及び第4のソフトウェアコンテナ要素450が、Kubernetesワーカ410内に含まれる。
【0108】
Kubernetesプラットフォームは、図2を参照して説明されるように、これらのコンテナを管理することに関与する。第1のソフトウェアコンテナ、第2のソフトウェアコンテナ、第3のソフトウェアコンテナ、及び第4のソフトウェアコンテナは、図3を参照して説明されるのと同じコンテナであってもよい。
【0109】
セルフサービス端末400はまた、Kubernetesワーカ410の外部を実行する追加のソフトウェア(図示せず)を含む。Kubernetesワーカ410では、第1のソフトウェアコンテナ420及び第2のソフトウェアコンテナ430は、デバイスサーバポッド425と称される単一のポッド内で実行される。第1のソフトウェアコンテナ420はINITタイプのものであるため、デバイスサーバポッド内で実行される(すなわち、デバイスサーバコンテナの前に実行される)第1のコンテナである。
【0110】
第3のソフトウェアコンテナ440は、エンドポイントポッド445と称される単一のポッド内で実行される。
【0111】
第4のソフトウェアコンテナ450は、デバイスプラグインポッド455と称される単一のポッド内で実行される。
【0112】
これらのポッドの各々の作成は、当業者によって理解されるように、3つの異なるポッド仕様ファイル(すなわち、deployment.YAMLファイル)によって定義される。ポッドは、共有ストレージ及びネットワークリソースを備えたコンテナ、並びにポッド内でコンテナをどのように走らせるかについての仕様を提供するために、Kubernetesで使用される。
【0113】
SST400の動作中、これらのポッド/コンテナの各々は、コンテナエンジン(図示せず)のコンテナランタイム(図示せず)によって実行される。これらのコンテナの各々に関連付けられた画像ファイルは、本明細書に記載されるように組み立てられてもよい。
【0114】
別の方法として、本発明のある特定の実施形態では、選択されたコンテナ(例えば、デバイスサーバコンテナ)の画像ファイルは、本明細書に記載されるように組み立てられてもよく、一方で、SST内の他のコンテナの他の画像ファイルは、コンテナ画像レジストリに記憶されてもよく、いかなる組み立ても必要とせずにSSTで直接的に受信されてもよい。ソフトウェアコンテナの実行可能な画像ファイルを組み立てる方法論を、図11に記載する。
【0115】
図5は、Kubernetesマスタ及びKubernetesワーカを隔離して、走らせているサーバ500を示す。
【0116】
サーバは、複数のSST(図5には示されていない)と通信する。サーバは、1つ以上のプロセッサ(図示せず)、及び少なくとも1つのメモリ(図示せず)を有する。メモリは、ランタイム時にプロセッサによって実行される実行可能なソフトウェアを記憶する。
【0117】
実行可能なソフトウェアは、(ホストOSの)Linuxカーネル510を含む。本発明のある特定の他の実施形態では、他のオペレーティングシステムが使用され得ることが理解されよう。
【0118】
実行可能なソフトウェアはまた、Kubernetesマスタ520を含む。Kubernetesマスタは、図2を参照して上述したのと同様のコンポーネントを含む。
【0119】
これらは、APIサーバ522、スケジューラ524、コントローラマネージャ526、及びetcdデータベース528である。Kubernetesワーカ530もまた、サーバ上で実行される。Kubernetesワーカ530は、3つのポッドを含み、ポッド自体は、ソフトウェアコンテナ要素を含む。サーバ上の第1のポッドは、動的コンテナプロキシポッド532である。
【0120】
このポッドは、対応する動的コンテナプロキシソフトウェアコンテナを含む。動的プロキシソフトウェアコンテナは、実行可能な画像ファイルに対するコンテナエンジンからの要求を受信することと、アンテナエンジンが実行可能な画像ファイルを組み立てるために必要であろう事前定義されたモジュラー画像ファイルを定義するマニフェストを作成し、かつそれをコンテナエンジンに提供することとに関与する。
【0121】
プロキシコンテナの動作は、図9及び図15を参照して以下でより詳細に説明される。サーバ上の第2のポッドは、上流のコンテナレジストリポッド534である。このポッドは、対応する上流のコンテナレジストリソフトウェアコンテナを含む。レジストリコンテナは、各事前定義されたモジュラー画像ファイルを記憶し、かつ要求に応じて、これらの画像ファイルをコンテナエンジンに提供することに関与する。
【0122】
レジストリコンテナの動作は、図8及び図11を参照して以下でより詳細に説明される。サーバ上の第3のポッドは、事業ロジックポッド536である。このポッドは、対応する事業ロジックソフトウェアコンテナを含む。
【0123】
図6は、ソフトウェアコンテナとして実行するための実行可能な画像ファイル600の概略図を示す。図6に示される画像ファイルは、図4のデバイスサーバコンテナを提供するために実行可能である。
【0124】
実行可能な画像ファイルは、図11に記載されるように組み立てられた。図6に見ることができるように、実行可能な画像ファイルは、ベースオペレーティングシステム層605、Java層610、ドライバ層615、共通層620、ユーティリティ層625、スキャナ層630、スケール層635、プリンタ層640、及びデバイスサーバ層645を有する。
【0125】
図6の実行可能な画像ファイルは、各々が単一の層を有する一連のモジュラー画像ファイルから組み立てられているが、本発明のある特定の実施形態に従って、実行可能な画像ファイル中の層の任意の組み合わせを単一のモジュラー画像ファイルに組み合わせてもよいことが理解されよう。これは、例えば、BaseOS及びJava層の場合である。
【0126】
これは、ドライバ、共通、及びユーティリティの層でも当てはまる場合がある。更に、図6では、実行可能な画像ファイルは一連の単層モジュラー画像ファイルから組み立てられているが、モジュラー画像ファイル(例えば、Java画像ファイル又はドライバ画像ファイル)の各々は、本発明のある特定の他の実施形態では複数の層を有してもよい。
【0127】
図7は、一連の事前定義されたモジュラー画像ファイル705からの実行可能な画像ファイル700の組み立てを示すことを助ける。
【0128】
図6に示される画像ファイルは、図4のデバイスサーバコンテナを提供するために実行可能である。
【0129】
図7には、ベースオペレーティングシステム用の実行可能な命令を定義する1つの層、及びJavaプログラミング言語を解釈するための実行可能な命令を定義する1つの層である、2つの層を有する第1の事前定義されたモジュラー画像ファイル710がある。これは、ベースOS画像ファイルと呼んでもよい。もちろん、本発明のある特定の他の実施形態では、ベースOS層及びJava層は、別個のモジュラー画像ファイルとして提供されてもよい。本発明のある特定の他の実施形態では、他のプログラミング言語が使用されている場合、Java層は必要とされない場合があることが更に理解されよう。
【0130】
ベースOS層は、ソフトウェアコンテナ(例えば、Ubuntu)内で利用されるオペレーティングシステムを定義する。しかしながら、ベースOS層は、本発明のある特定の他の実施形態で必要とされない場合がある。
【0131】
図7はまた、3つの層を有する第2の事前定義されたモジュラー画像ファイル720を示す。これは、ソフトウェア依存性画像ファイルと呼んでもよい。第1の層は、ドライバに対して実行可能な命令を定義する。ドライバ層は、画像にユーザ空間ドライバをインストールすることに関与する実行可能な命令を定義する、任意選択の層である。ユーザ空間ドライバの一例は、低レベルのUSBヘルパであってもよい。
【0132】
一部の画像は、いずれのユーザ空間ドライバも必要としない場合があることが理解されよう。第2の層は、共通層である。共通層は、他の層によって共有又は使用されるフレームワークコンポーネントを包含する実行可能な命令を定義する。
【0133】
かかるフレームワークの一例は、他のコンポーネントからのログを制御及びキャプチャするために使用されるロギングフレームワークであってもよい。第3の層は、ユーティリティ層である。ユーティリティ層は、ユーザ向けユーティリティ及びツールを含む実行可能な命令を定義する、任意選択の層である。
【0134】
かかるツールの一例は、SST上にインストールされているデバイスのリストを閲覧し、かつ診断チェックを走らせるなどの動作により、これらのデバイスと相互作用するために使用され得る、システムメンテナンスユーティリティであってもよい。
【0135】
本発明のある特定の他の実施形態では、ドライバ、共通及びユーティリティ層の各々が、独自の事前定義されたモジュラー画像ファイル内に提供されてもよいことが理解されよう。ドライバ層及び/又は共通層及び/又はユーティリティ層は、本発明のある特定の実施形態において必要とされない場合があることが更に理解されよう。
【0136】
図7はまた、スキャナ周辺デバイスと通信するために実行可能な命令を定義する単一の層を有する第3の事前定義されたモジュラー画像ファイル730と、スケール周辺デバイスと通信するための実行可能な命令を定義する単一の層を有する第4の事前定義されたモジュラー画像ファイル740と、プリンタ周辺デバイスと通信するために実行可能な命令を定義する単一の層を有する第5の事前定義されたモジュラー画像ファイル750と、を示す。
【0137】
これらの画像ファイルは、周辺デバイスドライバ画像ファイルと称され得る。スキャナ、スケール、及びプリンタのモジュラー画像ファイルは、特定のスキャナ、スケール、又はプリンタに関連付けられた画像ファイルであることが理解されよう。一例として、スキャナは、NCR(本願出願人の登録商標)2356ハンドヘルドスキャナであってもよく、スケールは、NCR8789スケールであってもよく、プリンタは、NCR7169サーマルレシートプリンタであってもよい。
【0138】
本発明のある特定の他の実施形態では、他の周辺デバイス(バーコードリーダ、カメラなど)に関連付けられたモジュラー画像ファイルが必要となる場合があることも理解されよう。
【0139】
図7に示される周辺デバイス画像ファイルは、必ずしも必要ではない場合があることも理解されよう。図7では、低いレベルで、SSTに接続された周辺デバイスのうちの1つ以上を制御し、構成し、又は別様に当該周辺デバイスにアクセスし、かつネットワークを横切って、SSTの他のコンポーネントに事業レベルの機能を公開するための実行可能な命令を定義する単一のデバイスサーバ層を有する第6の事前定義されたモジュール画像ファイル760がまた存在する。
【0140】
図7はまた、単一の小売デバイスサーバ層を有するオプションの第7の事前定義されたモジュラー画像ファイル770を示す。モジュラー画像ファイル770は、コンテナがPOS端末上で実行されるときに、画像ファイル760の代わりに使用され得る。他の実行可能な画像ファイル(例えば、図4の他のコンテナ用)を組み立てるために使用可能な他の事前定義されたモジュラー画像ファイルは、組み立てられるべき特定の実行可能な画像ファイルのニーズに応じて定義され得ることが理解されよう。
【0141】
展開ファイルは、実行可能な画像ファイル用にどの層を組み立てるかを指定する1つの方法を提供する。展開ファイルは、コンテナ名で層をエンコードすることで実現され得る。例えば、名前の各要素は、含まれる層の名前であってもよい。組み立てられる層を定義する他の方法を使用してもよく、これは、例えば、ConfigMapは層を列挙し、層のリストを名前にし、その名前を画像名として参照することができる。
【0142】
展開ファイルは、Kubernetesマスタ又はSST上で走るコンテナエンジンによって利用されて、図11で論じたステップの一部を促すことができる。すなわち、コンテナエンジンは、一連の事前定義されたモジュラー画像ファイルから実行可能な画像ファイルを組み立てるために必要なステップを開始するために、この展開ファイルを処理する。展開ファイルは、Kubernetesクラスタ内のコンテナを走らせるポッドの数及び構成を指定する。
【0143】
図8は、フロントエンド810及びバックエンド820を有する、コンピューティングシステム800を示す。フロントエンドには、SST830がある。これは、図1図4に関して記述されるようなSSTのうちの1つであってもよい。
【0144】
SSTは、3つの接続された周辺デバイス835を有する。SST830は、プロセッサ(図示せず)及びメモリ(図示せず)を有する。メモリは、プロセッサによって実行可能であり得る、実行可能なソフトウェアを記憶する。
【0145】
図8では、SSTは、Kubernetesフレームワーク内の第1のソフトウェアコンテナ840及び第2のソフトウェアコンテナ850を実行している。第1のソフトウェアコンテナは、図4のデバイスサーバコンテナであってもよい。第2のソフトウェアコンテナは、図4のエンドポイントコンテナであってもよい。
【0146】
また、SST内には、SSTのユーザインターフェースに関連付けられた実行可能ソフトウェア860が含まれる。これは、ウェブベースのユーザインターフェースである。しかしながら、他のブラウザが、本発明のある特定の他の実施形態で使用されてもよい。
【0147】
UIは、MQTTプロトコルを介して第1のソフトウェアコンテナ要素と通信する。ユーザがユーザインターフェースを介してSSTと対話すると、コマンドは、コマンドを処理する第1のソフトウェアコンテナ要素に送信される。コマンドが処理されると、第1のソフトウェアコンテナは、サーバ及び/又は周辺デバイスと通信してもよく、及び/又は必要に応じて命令をユーザインターフェースに返してもよい。
【0148】
バックエンド820には、サーバペア870がある。本発明のある特定の他の実施形態では、単一のサーバ、又は一対のサーバよりも多いサーバが存在し得ることが理解されよう。サーバペアの各サーバは、1つ以上のプロセッサ(図示せず)と、サーバペアのプロセッサによって実行するために実行可能な命令を記憶する少なくとも1つのメモリ(図示せず)とを有する。
【0149】
サーバペアの実行可能なソフトウェアは、動的コンテナプロキシ880及び上流のコンテナレジストリ890を含む。プロキシ及びレジストリは、サーバペアの異なるサーバ上で実行されるが、本発明のある特定の他の実施形態では、同じサーバ上で実行され得ることが理解されよう。
【0150】
プロキシ及びレジストリはまた各々、Kubernetesフレームワーク内のソフトウェアコンテナとして提供される。プロキシは、SST上で走るコンテナエンジン(図示せず)からのコンテナ画像ファイルの要求を処理する責任を負う。コンテナレジストリは、SSTのコンテナエンジンによってアクセス可能である、複数の事前定義されたモジュラー画像ファイルを記憶する責任を負う。
【0151】
モジュラー画像ファイルは、マイクロコンテナ画像ファイル又は単にマイクロコンテナ(μコンテナ)と呼んでもよい。SSTの起動時に(コンテナが実行されていない場合)、コンテナエンジンは、SSTのプロセッサ上で実行され、その後、コンテナエンジンは、実行可能な画像ファイルに対する要求をプロキシ980に送信する。この要求は、実行可能な画像ファイルを組み立てるために必要な、事前定義されたモジュラー画像ファイルのリストを定義する画像の名前を含む。
【0152】
これに応答して、プロキシは、レジストリと通信して、実行可能な画像ファイルに必要な事前定義されたモジュラー画像ファイルがその中に記憶されているかどうかを判定する。これは、レジストリ内に記憶されている事前定義されたモジュラー画像ファイルの各々に対して画像マニフェストを引き出し、次に、実行可能な画像ファイルに必要な事前定義されたモジュラー画像ファイルの各々に対して画像マニフェストが存在することを確認することによって行われる。
【0153】
プロキシが、必要なモジュラー画像ファイルが全てレジストリに記憶されていると判定した場合、プロキシは、コンテナエンジンが実行可能な画像ファイルを組み立てるために必要な、事前定義されたモジュラー画像ファイルの各々を定義する新しい画像マニフェストを作成する。
【0154】
次に、プロキシは、このマニフェストをコンテナエンジンに送信する。このマニフェストを受信することに応答して、コンテナエンジンは、マニフェストを処理し、レジストリと通信して、実行可能な画像ファイルを組み立てるために必要な事前定義されたモジュラー画像ファイルを引き出すか、又は取得する。
【0155】
コンテナエンジンは、プロキシによって作成された画像マニフェストで定義されるため、どのモジュラー画像ファイルが必要かを把握する。必要なモジュラー画像ファイルが全て受信されると、コンテナエンジンは、これらを単一の実行可能な画像ファイルに組み立てる。これは、モジュラー画像ファイルが付加的であるために可能である。その後、コンテナエンジンは、ソフトウェアコンテナ要素を提供するために、実行可能な画像ファイルを実行する。
【0156】
図9は、サードパーティ周辺デバイス統合を備えたコンピューティングシステム900を示す。図9には、フロントエンド910及びバックエンド920がある。フロントエンドには、SST930がある。
【0157】
SSTは、事前に構築された関連する事前定義されたモジュラー画像ファイルを有する、2つの接続された周辺デバイス935を有する。周辺デバイス935は、SST上で実行されるソフトウェアコンテナ要素940を提供するのと同じ企業によって提供される。
【0158】
また、SSTには、サードパーティ周辺デバイス945が接続されている。デバイスは、サードパーティから提供されているため、当初は事前に構築された関連する事前定義されたモジュラー画像ファイルはない。したがって、サードパーティデバイスを使用する場合、サードパーティは、関連する事前定義されたモジュラー画像ファイル(例えば、このデバイスと通信するための実行可能な命令を定義する単一の層のみ)を作成し、これをコンテナレジストリ(図示せず)に提供する。
【0159】
次に、ソフトウェアコンテナ要素940の実行に必要な実行可能な画像ファイルを、図11に記載される方法論に従って、かつ図8を参照して上述したように、組み立てる。これは、図9に示すように、サードパーティデバイスは、他のモジュラー画像ファイルと同じベースOSを使用するモジュラー画像ファイル942を有する。バックエンド920には、サーバペア960がある。サーバペアは、ビジネス論理要素970を実行するプロセッサを含む。
【0160】
図10は、サードパーティデバイス統合を有する別のコンピューティングシステム1000を示す。このシステムは、上記の図9を参照して説明したものと類似している。しかしながら、コンテナレジストリ内に作成され、かつ記憶されたサードパーティ周辺デバイス用の事前定義されたモジュラー画像ファイルを、単一の組み立てられた実行可能な画像ファイルに組み込む代わりに、2つの実行可能な画像ファイルが、組み立てられる。
【0161】
1つの実行可能な画像ファイルには、サードパーティによって作成されていない周辺デバイスに関連付けられている事前定義されたモジュラー画像ファイルが含まれる。他の実行可能な画像ファイルには、サードパーティによって作成された周辺デバイスに関連付けられている事前定義されたモジュラー画像ファイルが含まれる。
【0162】
これは、図10に示すように、サードパーティデバイスは、他のモジュラー画像ファイルと同じベースOSを使用するモジュラー画像ファイルを有する。これらのファイルの各々の組み立ては、図11又は上記の図8を参照して説明したとおりである。言い換えれば、図10は、それらを単一のコンテナに組み込むのではなく、新しいコンテナを作成するが、同じデバイスサーバ及びベースO/S層を、同じ方法で再利用及び組み立てることができるように、サードパーティデバイスを扱う異なる方法を表す。
【0163】
当然のことながら、周辺仮想化は、異なるOS(例えば、Linux及びWindows)に関連付けられたドライバの統合を可能にするために使用されてもよく、その結果、Linuxを走らせているPOSに接続されたデバイスは、Windows仮想マシン上で利用可能にされてもよく、又はその逆でもよい。
【0164】
図11は、SST上で実行可能なソフトウェアコンテナ要素として実行するために実行可能な画像ファイルの組み立て中に行われる、ある特定のステップのフローチャート1100を示す。
【0165】
SSTは、図1図13に示されるSSTのいずれかであってもよい。SSTを最初に導入する際、SSTにどのソフトウェアをインストールするか、またどの周辺デバイスをSSTに接続するかが分かっている。
【0166】
この情報を使用して、第1のステップS1105は、起動時にSST上で実行されるべき各ソフトウェアコンテナに対する展開ファイルを作成する。展開ファイルは、特に、画像ファイルの名前を指定する。画像ファイルは、実行可能な画像ファイルに必要な画像ファイルのリストを定義するために命名される。
【0167】
上述したように、ConfigMapを使用して、画像ファイルのリストを定義することもできる。展開ファイルが作成されると、展開ファイルは、SSTと通信するサーバ上で走っているKubernetesマスタのAPIサーバにアップロードされる。Kubernetesマスタは、図2又は図5に関して示されるのと同じマスタであってもよい。APIサーバは、展開ファイルを受信し、かつ展開ファイルを、Kubernetesマスタのetcdデータベースに記憶する。
【0168】
次のステップS1110は、SSTの電源を入れることである。これは、例えば、端末がその日に初めて使用されるとき、例えば、店舗が閉鎖された期間の後などに発生する。また、端末が再起動するときなどの、他のときにも起こり得る。次いで、ホストOS及びKubernetesワーカ構成を含む、SST上のソフトウェアが、SSTのメモリからロードされ、SSTのプロセッサによって実行される。その後、次のステップS1115は、Kubernetesマスタのコントローラマネージャによって、etcdデータベースに従って指定されるようなSSTに関連付けられたKubernetesワーカ上で実行されるべきポッドと、実際にSST上で実行されるポッドとの間の差異を検出することを伴う。
【0169】
ポッドによって必要とされるリソースがKubernetesワーカで利用可能であることを判定するために、Kubernetesワーカで利用可能なリソースもチェックされることになる。SST上で実行する必要があるポッドがないこと、及び好適なリソースが利用可能であることを検出することに応答して、KubernetesマスタのAPIサーバは、この不一致を解決するためにSST上のkubeletに情報を送信する。
【0170】
この情報は、SST上で実行される各ポッドのための展開ファイルを含む。Kubernetesオーケストレーションプラットフォームを使用しない、本発明のある特定の他の実施形態によれば、コンテナは、ポッド内で走らせる必要なしに実行され得る(これは、Kubernetesシステムの特定の特徴である)ことが理解されよう。
【0171】
次のステップS1120は、kubeletによって、APIサーバからの情報を受信し、かつ展開ファイルをコンテナエンジン要素に渡すことを伴う。
【0172】
次のステップS1125は、コンテナエンジンによって、展開ファイルを読むことと、コンテナエンジンとコンテナレジストリ(複数の事前定義されたモジュラー画像ファイルを記憶する)との間に通信的に配置される動的コンテナプロキシに要求を送信することによって、実行可能な画像ファイルを要求することとを伴う。
【0173】
要求には、実行可能な画像ファイルに必要な画像ファイルのリストを定義する、(展開ファイルからの)画像ファイルの名前が含まれる。プロキシ及びレジストリは、サーバ上のメモリに、かつ/又はSSTのローカルメモリ上に記憶されてもよい。次のステップS1130は、動的コンテナプロキシによって、画像ファイルの名前を解析して、実行可能な画像ファイルに必要な事前定義されたモジュラー画像ファイルをチェックすることを伴う。
【0174】
これは、画像ファイルの名前は事実上、必要な事前定義されたモジュラー画像ファイルの名前のエンコードされたリストであるため、達成され得る。
【0175】
次に、プロキシは、実行可能な画像ファイルに必要な全ての指定された事前定義されたモジュラー画像ファイルがメモリ内で利用可能であることをチェックするステップ(図示せず)を実施する。プロキシは、上流のコンテナレジストリから、各事前定義されたモジュラー画像ファイルに関連付けられたマニフェストを受信し、かつコンテナエンジンからプロキシに送信された画像ファイルの名前で表される各事前定義されたモジュラー画像ファイルに対応するマニフェストが存在するかどうかを判定することによって、このチェックステップを実施する。
【0176】
プロキシが、プロキシに送信された名前で表される各画像ファイルに対してマニフェストが存在すると判定し、ひいては、全ての必要な事前定義されたモジュラー画像ファイルがレジストリ内に存在すると判定する場合、次のステップS1135は、プロキシによって、実行可能な画像ファイル内に含まれる各事前定義されたモジュラー画像ファイルを定義する、
コンテナ画像マニフェストを動的に作成することを伴う。マニフェストによって定義されるこれらのモジュラー画像ファイルは、実行可能な画像ファイルに必要な展開ファイルを指定するものである。
【0177】
次に、次のステップS1140は、プロキシによって、画像マニフェストがコンテナエンジンによって受信されるように、画像マニフェストを送信することを伴う。当然のことながら、プロキシによって実施されるステップは、本発明のある特定の他の実施形態によるSST又はコンテナレジストリによって実施されてもよい。
【0178】
画像マニフェストがコンテナエンジンによって受信されると、次のステップS1145は、実行可能な画像ファイルを組み立てるために必要な事前定義されたモジュラー画像ファイルの各々を、コンテナエンジンによって受信することを伴う。
【0179】
これらのモジュラー画像ファイルは、コンテナレジストリから受信される。受信される事前定義されたモジュラー画像ファイルは、コンテナエンジンによって受信される画像マニフェスト内に定義されたものである。モジュラー画像ファイルの受信はまた、画像ファイルの「引き出し」と呼んでもよい。
【0180】
モジュラー画像ファイルがコンテナエンジンによって受信されると、次のステップS1150は、受信した事前定義されたモジュラー画像ファイルの各々を使用して、実行可能な画像ファイルを組み立てることを伴う。組み立てられた実行可能な画像ファイルは、ソフトウェアコンテナ要素として実行され得る。したがって、画像ファイルは、ソフトウェアコンテナとして実行される能力を有するという意味で実行可能である。
【0181】
これは、独自のソフトウェアコンテナとして実行できない(すなわち、他の事前定義されたモジュラー画像ファイルと組み立てられることのない)、多くの事前定義されたモジュラー画像ファイルとは対照的である。次のステップ(図示せず)は、コンテナエンジンによって実行可能な画像ファイルを実行して、実行可能な画像ファイルのインスタンスをソフトウェアコンテナ要素として提供することを伴う。
【0182】
したがって、ソフトウェアコンテナ要素には、SSTのプロセッサ(又は複数のプロセッサ)上で実行され得る、実行可能なソフトウェアが含まれる。当然のことながら、コンテナエンジンによって実施される上述のステップは、本発明のある特定の実施形態では、コンテナエンジンのコンテナランタイムによって特異的に実施されてもよい。
【0183】
別のステップ(図示せず)は、実行可能な画像ファイルをSST及び/又はコンテナレジストリのメモリに記憶することを伴う。次に、実行可能な画像ファイルは、SSTが再起動されるたびに上述のように組み立てる必要はない。しかしながら、画像ファイルの記憶にメモリを使用しないことが望ましい場合、実行可能な画像ファイルは、SSTが開始されるたびに上述のように組み立てられてもよい。
【0184】
上述の本発明のある特定の実施形態は、小売環境用のデバイスサーバ画像ファイルの組み立てを記述するが、本発明のある特定の他の実施形態は、非小売特定の画像ファイルを組み立てるために使用され得ることが理解されよう。
【0185】
本発明は、プラグインを層として作成し、かつプラグインの異なる組み合わせを含む、走らせることができるコンテナに動的に組み立てることができる、「プラグインアーキテクチャ」を有する任意のソフトウェアに使用され得る。
【0186】
本明細書の記述及び特許請求の範囲全体を通して、「備える(comprise)」及び「包含する(contain)」という言い回し及びこれらの変形例は、「を含むが、これらに限定されない」ことを意味し、他の部分、添加物、コンポーネント、整数、又はステップを除外する(及び除外しない)ことを意図するものではない。
【0187】
本明細書の記述及び特許請求の範囲全体を通して、文脈上別段の解釈が要求されない限り、単数形は複数形を包含する。特に、不定冠詞が使用される場合、文脈上別段の要求がない限り、本明細書は、複数及び単数を企図するものとして理解されるべきである。
【0188】
好ましい実施形態及びこれらの様々な態様を参照して、本開示を具体的に示し、説明してきたが、当業者は、本開示の趣旨及び範囲から逸脱することなく、様々な変更及び修正がなされ得ることを理解されよう。添付の特許請求の範囲は、本明細書に記載される実施形態、上述の代替案、及びこれら全ての等価物を含むものとして解釈されることが意図される。
【0189】
本発明の特定の態様、実施形態、又は実施例と併せて記載される特徴、整数、特性、又は群は、これらとの互換性がない場合を除き、本明細書に記載される任意の他の態様、実施形態、又は実施例に適用可能であると理解されるべきである。本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)に開示される全ての特徴、並びに/又はそのように開示される任意の方法若しくはプロセスの全てのステップは、特徴及び/又はステップのうちの少なくともいくつかが相互に排他的である組み合わせを除いて、任意の組み合わせで組み合わせられてもよい。
【0190】
本発明は、任意の前述の実施形態のいかなる詳細にも限定されない。本発明は、本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)に開示される特徴の任意の新しい1つ、又は新しい組み合わせ、あるいはそのように開示される任意の方法又はプロセスのステップの任意の新しい1つ、若しくは任意の新しい組み合わせに及ぶ。
【0191】
また、本出願に関連して本明細書と同時に、又は本明細書の前に出願され、かつ本明細書に関して一般に閲覧される全ての論文及び文献に向けられ、かかる全ての論文及び文献の内容は、参照により本明細書に組み込まれる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11