(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022171570
(43)【公開日】2022-11-11
(54)【発明の名称】コンテナイメージの提供
(51)【国際特許分類】
G06F 8/30 20180101AFI20221104BHJP
【FI】
G06F8/30
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022054345
(22)【出願日】2022-03-29
(31)【優先権主張番号】17/244671
(32)【優先日】2021-04-29
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVASCRIPT
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】アーセンオールト・マクス
(72)【発明者】
【氏名】チェン・ウェイ-ペン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA07
5B376BC14
5B376BC23
5B376BC57
5B376BC80
(57)【要約】
【課題】コンテナイメージを提供する。
【解決手段】親コンテナイメージを提供する方法は、コンテナイメージ名を取得することと、層ハッシュを取得することと、構造化データベースを構築することと、親コンテナイメージを返すことと、を含んでもよい。コンテナイメージ名は、プロセスを実行するための静的実行可能なソフトウェアを含むコンテナイメージのものであってもよい。層ハッシュは、コンテナイメージの各々に対して取得されてもよい。構造化データベースは、コンテナイメージ間の関係に基づいてもよく、この関係は、層ハッシュを使用して識別されてもよい。親コンテナイメージは、コンテナイメージに関する問い合わせに応答して返されてもよい。親コンテナイメージは、構造化データベースを使用して識別されてもよい。
【選択図】
図1
【特許請求の範囲】
【請求項1】
親コンテナイメージを提供する方法であって、
コンテナイメージの複数のコンテナイメージ名を取得することであって、前記コンテナイメージの各々は、プロセスを実行するための静的実行可能なソフトウェアを含む、ことと、
前記複数のコンテナイメージ名に対応する前記コンテナイメージの各々に対して1つ以上の層ハッシュを取得することであって、前記層ハッシュの各々は、前記コンテナイメージのうちの1つのイメージ層のハッシュを含む、ことと、
前記コンテナイメージ間の関係に基づいて、前記コンテナイメージの構造化データベースを構築することであって、前記コンテナイメージ間の前記関係は、前記コンテナイメージの各々に対する前記1つ以上のハッシュを使用して識別される、ことと、
第1のコンテナイメージに関する問い合わせに応答して、前記第1のコンテナイメージの親コンテナイメージを返すことであって、前記親コンテナイメージは、前記構造化データベースを使用して識別される、ことと、を含む、方法。
【請求項2】
前記コンテナイメージの前記構造化データベースは、前記コンテナイメージを取得することなく、かつ前記コンテナイメージを使用することなく構築される、請求項1に記載の方法。
【請求項3】
前記構造化データベースは、ベースノードを除く単一の親ノードを含むツリー構造における全てのノードを有する前記ツリー構造に基づく、請求項1に記載の方法。
【請求項4】
前記コンテナイメージの前記構造化データベースを構築することは、2つ以上のコンテナイメージに関連する層ハッシュの比較に基づいて、前記構造化データベース内にコンテナイメージを配置することを含む、請求項1に記載の方法。
【請求項5】
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間に非ベース層が重複していないことは、前記第1のコンテナイメージが第2のコンテナイメージに関連する前記構造化データベースのブランチに位置していないことを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の同一の重複は、前記第1のコンテナイメージと前記第2のコンテナイメージが同一であることを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれることは、前記第2のコンテナイメージが前記構造化データベースにおいて前記第1のコンテナイメージの子孫であることを示す、請求項4に記載の方法。
【請求項6】
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれておらず、前記第2の層ハッシュのセットの全ての層ハッシュが前記第1の層ハッシュのセットに含まれていないことは、前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースにおいて共通の祖先を共有していることを示し、
前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースの一部ではない共通の祖先を共有していることが示されている場合、前記構造化データベースを構築することは、前記構造化データベースにおけるプレースホルダノードを、前記第1のコンテナイメージと前記第2のコンテナイメージの親ノードとして配置することを含む、請求項4に記載の方法。
【請求項7】
前記層ハッシュに関連するタグの分類または前記コンテナイメージに関連するコンパイルデータに基づいて、前記構造化データベースを改訂することをさらに含み、コンテナイメージのための前記コンパイルデータは、前記コンテナイメージの層ハッシュを使用して、前記コンテナイメージの形成を記述する、請求項1に記載の方法。
【請求項8】
前記コンパイルデータは、前記コンテナイメージのイメージ層を使用して、前記コンテナイメージを生成するために使用されるコンテナファイルである、請求項7に記載の方法。
【請求項9】
前記コンパイルデータは、前記コンテナイメージの前記イメージ層を使用して、前記コンテナイメージの生成に応答して、システムによって出力されるコンテナヒストリーである、請求項7に記載の方法。
【請求項10】
前記コンテナイメージに関連する前記コンパイルデータに基づいて、前記構造化データベースを改訂することは、
前記構造化データベースにおける親コンテナイメージとして、プレースホルダノードを有する第1のコンテナイメージと第2のコンテナイメージを識別することであって、前記プレースホルダノードは、親コンテナイメージが存在するがまだ識別されていないことを示す、ことと、
前記第1のコンテナイメージの前記コンパイルデータを前記第2のコンテナイメージの前記コンパイルデータと比較して、前記プレースホルダノードの層特性を決定することと、
前記プレースホルダノードの前記層特性を前記コンテナイメージの層特性と比較して、前記プレースホルダノードまたは前記プレースホルダノードの層特性を識別することと、を含む、請求項7に記載の方法。
【請求項11】
前記コンテナイメージに関連する前記コンパイルデータに基づいて、前記構造化データベースを改訂することは、前記プレースホルダノードの前記層特性と前記コンテナイメージの層特性との比較に基づいて、前記第1のコンテナイメージと前記第2のコンテナイメージの親ノードとして第2のプレースホルダノードを作成することをさらに含む、請求項10に記載の方法。
【請求項12】
動作を実行するプロセッサによって実行可能なプログラミングコードを内部に符号化した非一時的なコンピュータ可読媒体であって、前記動作は、
コンテナイメージの複数のコンテナイメージ名を取得することであって、前記コンテナイメージの各々は、プロセスを実行するための静的実行可能なソフトウェアを含む、ことと、
前記複数のコンテナイメージ名に対応する前記コンテナイメージの各々に対して1つ以上の層ハッシュを取得することであって、前記層ハッシュの各々は、前記コンテナイメージのうちの1つのイメージ層のハッシュを含む、ことと、
前記コンテナイメージ間の関係に基づいて、前記コンテナイメージの構造化データベースを構築することであって、前記コンテナイメージ間の前記関係は、前記コンテナイメージの各々に対する前記1つ以上のハッシュを使用して識別される、ことと、
第1のコンテナイメージに関する問い合わせに応答して、前記第1のコンテナイメージの親コンテナイメージを返すことであって、前記親コンテナイメージは、前記構造化データベースを使用して識別される、ことと、を含む、非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
ソフトウェアは、コンテナまたはコンテナイメージと呼ばれる、開発、出荷および展開のための標準化されたユニットにパッケージされることがある。コンテナイメージは、実行可能コードを含む変更不能な静的ファイルを含んでもよく、情報技術(IT)インフラストラクチャ上で分離されたプロセスを実行することができるようする。コンテナイメージは、システムライブラリ、システムツール、およびソフトウェアプログラムがコンテナ化プラットフォーム(例えば、DockerまたはCoreOS Rkt)上で実行するために使用し得る他のプラットフォーム設定を含ことがある。
【0002】
本明細書において請求される主題は、何らかの欠点を解決するか、または上述のような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本明細書に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【0003】
一実施形態の態様によれば、親コンテナイメージを提供する方法は、コンテナイメージ名を取得することと、層ハッシュを取得することと、構造化データベースを構築することと、親コンテナイメージを返すことと、を含んでもよい。コンテナイメージ名は、プロセスを実行するための静的実行可能なソフトウェアを含むコンテナイメージのものであってもよい。層ハッシュは、コンテナイメージの各々に対して取得されてもよい。構造化データベースは、コンテナイメージ間の関係に基づいてもよく、この関係は、層ハッシュを使用して識別されてもよい。親コンテナイメージは、コンテナイメージに関する問い合わせに応答して返されてもよい。親コンテナイメージは、構造化データベースを使用して識別されてもよい。
【0004】
本実施形態の目的および利点は、少なくとも特許請求の範囲において特に指摘された要素、特徴、および組み合わせによって実現され、達成される。
【0005】
前述の一般的な記載および以下の詳細な説明は例示的かつ説明的であり、特許請求の範囲を限定するものではないことが理解されるべきである。
【図面の簡単な説明】
【0006】
例示的な実施形態が、添付の図面の使用を通して、追加の特異性および詳細を伴って記載され、説明される。
【0007】
【
図1】問い合わせコンテナイメージに関連する親コンテナイメージを提供する例示的な方法を示すフローチャートである。
【0008】
【
図2A】例示的な構造化データベースの様々な構築改訂を示す。
【
図2B】例示的な構造化データベースの様々な構築改訂を示す。
【
図2C】例示的な構造化データベースの様々な構築改訂を示す。
【
図2D】例示的な構造化データベースの様々な構築改訂を示す。
【0009】
【0010】
【0011】
【
図4】問い合わせコンテナイメージに関連する親コンテナイメージを提供するために使用され得る例示的なシステムを示す。
【発明を実施するための形態】
【0012】
開発者がソフトウェアコンテナを作成したいときに、開発者は通常、ソフトウェアコンテナをゼロから作成することを意図していない。むしろ、開発者は、既存のコンテナイメージに基づいて、ソフトウェアコンテナを定期的にビルドする。コンテナイメージは、実行可能なコードを含む変更不能な静的ファイルを含んでもよく、そのため、コンピューティングシステム上で孤立したプロセスを実行することができる。コンテナイメージは、システムライブラリ、システムツール、およびプログラムがコンピューティングシステム上のコンテナ化プラットフォーム上で実行するために使用し得る他のプラットフォーム設定を含んでもよい。
【0013】
コンテナイメージは、コンテナ層と呼ばれる複数の異なるコンテナイメージ層から形成され得る。コンテナ層は、一緒にコンパイルされて、コンテナイメージを形成する他のコンテナイメージであってもよい。コンテナイメージのコンテナ層は、親子関係でアレンジされてもよく、各コンテナ層が1つの子層および1つの親層を含むようにする。したがって、他のコンテナイメージである、現在のコンテナイメージのコンテナ層は、現在のコンテナイメージに対する親コンテナイメージとして記述されてもよい。例えば、現在のコンテナイメージの第1のイメージ層は、複数のイメージ層を含んでもよい。第1のイメージ層は、前のコンテナイメージであってもよい。1つ以上の変更を前のコンテナイメージに加えてもよく、1つ以上の変更を前のコンテナイメージとコンパイルして現在のコンテナイメージを生成してもよい。前のコンテナイメージは現在のコンテナイメージの親コンテナイメージであってもよい。
【0014】
各コンテナイメージは、親コンテナ層またはイメージを含んでもよい。親コンテナ層は、さらなる親コンテナ層または親の親コンテナイメージを含まなくてもよい。親コンテナイメージを有さないコンテナイメージは、ベースイメージと呼ばれてもよい。いくつかの実施形態において、ベースコンテナ層は、特定のオペレーティングシステムタイプのために構成された層であってもよい。
【0015】
親コンテナのイメージに関する情報は、開発者に親コンテナイメージを推奨するために使用されてもよい。例えば、既存のコンテナイメージの親コンテナイメージが既知である場合、望ましい特徴の記述に関する問い合わせを受けたことに応答して、コンテナを作成するためのベースとして使用するように、開発者に親コンテナイメージを推奨してもよい。代替的または追加的に、親コンテナイメージの情報を用いて、推奨システムは、開発者が必要条件を満たすように推奨コンテナイメージをカスタマイズするために、類似のコンテナイメージを開発者に推奨してもよい。例えば、開発者は、再構成されたコンテナファイルをカスタマイズして、開発されるべきアプリケーションの必要条件に適合するようにしてもよい。
【0016】
状況によっては、コンテナイメージは、コンテナファイルに関連してもよい。コンテナファイルを使用して、コンテナイメージのコンテナ層を含むコンテナイメージを生成してもよい。例えば、コンテナファイルは、前のコンテナイメージであってもよいコンテナ層の名前と、コンテナ層がコンパイルされてコンテナイメージを形成する順序とを含んでもよい。例えば、コンテナファイルは、一般に、コンテナファイルに関連するコンテナイメージが基づく親コンテナイメージを識別するFROMディレクティブを含んでもよい。したがって、コンテナファイルはコンテナイメージの親コンテナイメージ情報を提供してもよい。しかしながら、親コンテナイメージの推奨を自動化する際の主な障害は、コンテナファイルにおけるように、コンテナイメージをそれらの親コンテナイメージにマッピングする信頼性の高いデータセットが欠如していることが含まれる。従来のツールを使用してコンテナファイルを再構築しようとすると、不正確なコンテナファイルもたらすことがある。例えば、従来のツールをしようして、コンテナイメージの特定のバージョンに対応するコンテナファイルのデータセットをビルドすることは不可能であることがある。例えば、ポストされたコンテナファイルに見出される親のイメージ情報は時代遅れであることがある。場合によっては、最新のものとして識別された特定の親イメージが更新され、子コンテナファイルが生成されてから再び最新のものとして識別された場合、親情報が不正確になることがある。代替的または追加的に、コンテナイメージの全てのバージョンが利用可能であるわけではない。例えば、開発者は、コンテナイメージのすべてのバージョンを公開することを拒否し、コンテナイメージのいくつかの古いバージョンがもはや利用できない場合がある。
【0017】
十分なデータセットを生成するための従来の方法の1つは、コンテナファイルのためのコンテナライブラリ、またはコンテナリポジトリ(例えば、DockerHubおよびGitHub)をマイニングすることを伴う。しかしながら、従来のコンテナライブラリは、効果的なデータセットを生成するための不十分または不正確な情報を提供することがある。例えば、GitHubは、通常、コンテナイメージの最新バージョンのコンテナファイルのみを含み、高レベルの親コンテナイメージを持つコンテナファイルを含むことがある。したがって、例えば、GitHubはコンテナの祖先の限られたサンプルを提供することがある。追加的に、DockerHubは、ホスティングされたコンテナイメージを有するコンテナファイルを含むことがある。しかし、利用可能なコンテナファイルに見出される親コンテナイメージデータは、時代遅れであることが多い。例えば、コンテナファイルは、その親コンテナイメージの特定のバージョンの情報を含まないことがある。代わりに、コンテナファイルには、バージョンのキーワード「最新」のみが構成されている。ただし、親イメージの新しいバージョンが公開されると、上述のコンテナファイルの「最新」バージョンに関する情報はもはや無効である。さらに、コンテナイメージのいくつかのバージョンがDockerHubから欠落していることがあり、これは、コンテナイメージの祖先に関する不完全なデータを提供することがある。
【0018】
したがって、例えば、与えられたコンテナイメージに関連する親コンテナイメージを一貫して返すための従来のツールはない。さらに、従来のツールは、ローカルプル(コンテナリポジトリからコンテナイメージを要求する)を必要とすることがあり、これは、時間的にも空間的にも非効率的であり、エラーを起こしやすいことがあり、ファミリーツリーの欠落したノードをパッチアップしないことがあり、親コンテナイメージを含むFROMディレクティブでコンテナファイルを再構成できないことがある。
【0019】
いくつかの実施形態において、親子コンテナイメージ関係は、公共に利用可能なコンテナイメージから生成されてもよい。一例として、本明細書に記載される実施形態を使用して生成されるコンテナイメージファミリーツリーを使用して、親子コンテナイメージ関係が生成されてもよい。親子コンテナイメージ関係は、開発者によるコンテナ作成を容易にしてもよい。例えば、親子コンテナイメージ関係を用いて、開発者がコンテナをビルドするためのベースとして使用し得る親コンテナイメージを推奨してもよい。
【0020】
本明細書に記載されるシステムおよび方法のいくつかの構成において、コンテナイメージの情報に関する問い合わせに対して、リポジトリからのコンテナイメージのローカルプルは必要とされなくてもよい。したがって、開発者は、本明細書に記載されるシステムおよび方法を使用して、現行のコンテナイメージから親および先祖のコンテナイメージを識別することができる。開発者は、関連する親コンテナイメージを識別すると、関連するイメージを親コンテナイメージとして採用し、新しいコンテナを作成するために新たな開発を追加することができる。代替的または追加的に、生成されたコンテナファイルを用いて、開発者がビルドしたいものと類似するコンテナイメージを推奨してもよい。構成によっては、開発者は、生成されたコンテナファイルを修正してそれらのアプリケーションの必要条件を満たすようにしてもよいし、修正されたコンテナファイルを使用して、親コンテナイメージの推奨を受信してもよい。このような推奨システムは、コンテナイメージ名に基づいてコンテナライブラリに問い合わせするために検索機能を使用することを含む、関連するコンテナイメージおよび親コンテナイメージを識別するための従来の努力を上回る改良を提供する。
【0021】
実施形態は、添付の図面を参照して説明される。
【0022】
図1は、親コンテナイメージを提供する例示的な方法100を示すフローチャートである。親コンテナイメージは、問い合わせコンテナイメージに関連してもよい。
【0023】
方法100は、ステップ102で、DockerHub、GitHubなどのコンテナライブラリをスクレープすることによって開始することができる。いくつかの実施形態において、コンテナライブラリは、公式コンテナイメージ名、非公式コンテナイメージ名、および/またはタグ等価クラスのためにスクレープされてもよい。コンテナライブラリをスクレーピングすることは、コンテナイメージの複数のコンテナイメージ名を取得するために使用され得る。これらおよび他の実施形態において、コンテナイメージの各々は、プロセスを実行するための静的実行可能ソフトウェアを含んでもよい。
【0024】
いくつかの実施態様において、公式コンテナイメージは、検証されたコンテナイメージを含んでもよく、一般にコンテナファイルのベストプラクティスに適合することができ、これは、コンテナイメージに関連したロバストなコンテナファイルをもたらすことがある。構成によっては、例えば1000万以上のダウンロードに関連する非公式コンテナイメージのように、ダウンロードのある閾値数に関連する非公式コンテナイメージのみをスクレープしてもよい。代替的または追加的に、コンテナイメージ名および/またはタグ等価クラスは、本明細書に記載のコンテナアプリケーションプログラミングインターフェース(API)要求を介して取得されてもよい。
【0025】
いくつかの実施形態において、公式および/または非公式コンテナイメージ名のためのコンテナライブラリのスクレーピングは、Python APIリクエストを使用して実行されてもよい。代替的または追加的に、フィルタが、JSON(JavaScript Object Notation )応答に基づいて適用されてもよい。JSON応答の「description」フィールドは、将来の親コンテナイメージ推奨における使用のために記憶されてもよい。
【0026】
コンテナイメージは、数百~数千のタグと関連してもよい。各APIは、コンテナイメージに対してプルし、そのタグは個別に実行され、比較的高価である。コンテナイメージに対するタグのセット内に、等価タグの等価クラスが存在してもよい。等価なタグは、同義コンテナファイルまたは同義コンテナイメージを参照してもよい。すべてのタグをプルすることを避けるために、タグの等価のクラスが確立されてもよい。等価のクラス内の各等価のタグは、同じコンテナファイルおよび関連するコンテナイメージに対応してもよい。一例として、特定のコンテナイメージは、タグ16.04、18.04、latest、bionic、focal、20.04、14.04、trusty、およびxenialと関連してもよい。タグのセットは、第1の等価クラスとして、20.04、focal、およびlatest、第2の等価クラスとして、14.04およびtrusty、第3の等価クラスとして、16.04およびxenial、第4の等価クラスとして、18.04およびbionicを含んでもよい。タグのセットは、等価クラスを持つ辞書として、ディスジョイントセットとして記憶されてもよい。各等価クラスに対して代表的なタグが選択されてもよい。いくつかの実施形態において、等価クラス当たり1つの代表的なタグが考慮されてもよい。
【0027】
公式コンテナイメージのタグ同値クラスをスクレープするために、「Description」タブ下の「supported tag and respective container file links(サポートされているタグおよびそれぞれのコンテナファイルリンク)」に関連する情報をコンテナイメージのリポジトリからスクレープしてもよい。非公式コンテナイメージに対して、タグ等価クラスは、「Tags」タブ下に、固定されたアーキテクチャの等価なダイジェストを持つタグ名を使用して構築されてもよい。構成によっては、コンテナイメージページの「shared tags(共有タグ)」セクションもスクレープされてもよい。Seleniumなどの自動化されたウェブブラウザナビゲーションを容易にするツールを、コンテナイメージページの「shared tag」セクションをスクレープするために用いてもよい。
【0028】
構成によっては、コンテナファイルのセットが同様に取得されてもよい。例えば、自動化されたウェブブラウザナビゲーションは、公式コンテナイメージと共に用いられて、タグ等価クラスを構築するために使用されるコンテナライブラリリンクにナビゲートしてもよく、関連するコンテナファイルのためにリストされたタグに関連するリンクにナビゲートしてもよい。自動化されたウェブブラウザナビゲーションは、非公式コンテンツイメージと共に用いられて、関連するコンテナファイルを含む非公式コンテナイメージのコンテナファイルタブにナビゲートしてもよい。構成によっては、自動化されたウェブブラウザナビゲーションを用いて、URL(Uniform Resource Locator)拡張としてコンテナファイルタブを検索してもよい。非公式コンテナイメージの場合、関連するコンテナファイルが存在しない、古い、またはタグを含まないことがあり、潜在的に、比較的不十分な正解データセットをもたらす。しかし、非公式のコンテナイメージに関連するコンテナファイルの利用可能なサンプルは、本明細書に記載されるアルゴリズムの検証メトリックとして機能してもよい。
【0029】
方法100は、ステップ104において、コンテナライブラリからスクレープされたコンテナイメージ名の公式および/または非公式コンテナイメージに関連する1つ以上の層ハッシュおよび層ヒストリーを取得することによって継続してもよい。いくつかの実施形態において、層ハッシュの各々は、コンテナイメージのうちの1つのイメージ層のハッシュを含んでもよい。構成によっては、層ハッシュは、ファイルシステムの層ハッシュを含んでもよい。追加的に、コンテナイメージに関連する層ヒストリーが取得されてもよい。取得されたときの層ハッシュは、層ハッシュのセットを含んでもよいことに留意する。層ハッシュのセットは、関連するコンテナイメージを構築するために使用される場合に、セット内で層ハッシュによって表されるイメージ層が表される順序を示すように組織化されないことがある。むしろ、層ハッシュは、セット内でランダムに提供されてもよく、層ハッシュのセットから取得され得る情報が対応するコンテナイメージを生成するために使用されるイメージ層であるようにする。
【0030】
層ハッシュおよび/また層ヒストリーを取得することは、コンテナAPIなどのコンテナAPIを介して実行されてもよい。構成によっては、bashコードを使用して、コンテナAPIを問い合わせるための認証トークンを取得してもよい。実施形態によっては、表現状態転送API (Restful API)要求が用いられてもよく、コンテナAPI文書に従ってフォーマットされてもよい。コンテナAPI要求は、コンテナイメージのタグ情報およびマニフェストファイルを取得してもよい。マニフェストファイルは、ファイルシステムの層ハッシュのセットおよび/または全層ヒストリーに解析されてもよい。一例として、マニフェストファイルは、コマンドラインツールjqなどを介して解析されてもよい。いくつかの実施形態において、コンテナイメージおよび等価クラス当たりの1つの代表的なタグを用いて、関連する層ハッシュおよび層ヒストリーを取得してもよい。
【0031】
方法100は、ステップ106で、コンテナイメージ間の関係に基づいてコンテナイメージの構造化データベースを構築することによって継続してもよい。コンテナイメージ間の関係は、コンテナイメージの各々についての1つ以上の層ハッシュを使用して識別されてもよい。これらおよび他の実施形態において、コンテナイメージの構造化データベースは、コンテナイメージを取得することなく、かつコンテナイメージを使用することなく構築される。例えば、システムおよび方法は、コンテナイメージリポジトリまたはメモリからコンテナイメージをプルして、構造化データベースを構築しなくてもよい。むしろ、構造化データベースは、対応するコンテナイメージを取得することなく、層ハッシュを使用して生成されてもよい。
【0032】
構造化データベースはツリー構造であってもよい。ツリー構造は、コンテナイメージおよび/またはコンテナ層に対応するノードを含んでもよい。ツリー構造は、ベースノードを除いて、構造化データベースにおける全てのノードに対してツリー構造が単一の親ノードを含むように開発されてもよい。ベースノードは、親ノードを含まなくてもよい。ベースノードは、オペレーティングシステムタイプに関連してもよい。親ノードは、複数の子ノードを含んでもよい。したがって、親ノードは、コンテナイメージである子ノードの親コンテナイメージを表してもよい。これらおよび他の実施形態において、現在のノードとベースノードとの間のノードは、現在のノードによって表される現在のコンテナイメージを構築するために使用され得るコンテナイメージを表してもよい。
【0033】
いくつかの実施形態において、構造化データベースは、系統樹に基づいてもよい。代替的または追加的に、構造化データベースは、パトリシア木またはパトリシア木のバリエーションに基づいてもよい。いくつかの実施形態において、パトリシア木の各ブランチ経路は、部分文字列に対応し得る。例えば、構成によっては、記憶された単語中の文字は、コンテナファイルの行全体に対応してもよい。構造化データベースは、
図2A~
図2Dに示され、本明細書で一般的に記載されるように、エッジによって接続されたノードを含んでもよい。構造化データベースのエッジは、cコンテナファイルおよび/またはイメージ層のラインにほぼ対応してもよい。構造化データベースのノードは、コンテナイメージに対応してもよい。構造化データベースは、1つの子ノードのみを持つ非ルートノードを親ノードにマージしてもよい。構成によっては、構造化データベースの構築のために、各等価クラスから1つの代表的なタグが選択されてもよい。
【0034】
いくつかの実施態様において、構造化データベースの構築は、コンテナイメージに対して取得された層ハッシュに基づいてコンテナイメージの各々をモデリングすることを含んでもよい。これらおよび他の実施形態において、コンテナイメージのための層ハッシュは、層ハッシュのセットであってもよい。例えば、コンテナイメージの各々は、X={$,a1,a2,a3,...,an}としてモデル化されてもよく、ここで、$は、ベースコンテナ層またはベースノードを示すベーストークンであり、これはまた、a0として示されてもよい。構成によっては、コンテナイメージの各々は、関連する層ヒストリーにおいて、ベースコンテナ層を表してもよい$トークンを含んでもよい。ファイルシステム層ハッシュのセットは、APIがハッシュを順序通りに返さない可能性があるため、順序付けられないことがある。構成によっては、各文字aiは、関連するイメージ層の計算されたセキュアハッシュアルゴリズム256(SHA-256)ダイジェストに対応してもよい。
【0035】
コンテナイメージXは、構造化データベースの一部である全てのコンテナイメージの層ハッシュに基づいて、構造化データベースデータ構造に挿入されてもよい。構造化データベースは、構造化データベースにおいて表される全てのコンテナイメージの共通の祖先としてベースノードを含んでもよい。ベースノードを除く構造化データベースの各ノードは、単一の先行者を有してもよい。
【0036】
いくつかの実施形態において、コンテナイメージの構造化データベースを構築することは、2つ以上のコンテナイメージに関連する層状ハッシュの比較に基づいて、構造化データベース内にコンテナイメージを配置することを含んでもよい。例えば、構造化データベースに挿入されるコンテナイメージの層ハッシュのセットおよび構造化データベースにおけるコンテナイメージの層ハッシュのセットの交点は、新しいコンテナイメージを構造化データベースに正しくファイルするために、層ハッシュのセットの共通祖先に基づいて考慮されてもよい。
【0037】
例えば、Q={$,a1,a2,a3,...,an-1}としてモデル化された第1のコンテナイメージは、X={$,b1,b2,b3,...,bm-1}としてモデル化された構造化データベース内のコンテナイメージと比較されてもよい。したがって、例えば、nは、コンテナイメージQに関連する層状ハッシュ要素の数と等しく、mは、コンテナイメージXに関連する層状ハッシュエレメントの数と等しくてもよい。Q∩X={$,c1,c2,c3,...,ck-1}としてモデル化されたコンテナイメージの交点が計算されてもよく、ここで、kは、コンテナイメージQとコンテナイメージXが共有する層状ハッシュ要素の数を表す。kprevとして表される共有要素のベースライン数は、コンテナイメージの各々が共通にべーストークンを含んでもよく、したがってコンテナイメージの各々の交点が共通に少なくとも1つの要素を有することがあることを反映するように1として設定されてもよい。構成によっては、コンテナイメージQとコンテナイメージXとの重複は、5つのケースのうちの1つ以上に入ってもよい。5つの場合は、構造化データベース内のコンテナイメージXの位置に関して、コンテナイメージQが構造化データベース内にどのように配置され得るかを示してもよい。
【0038】
第1の場合において、コンテナイメージQおよびコンテナイメージXは、ベーストークンを越えていかなる重複も呈さないことがある。すなわち、コンテナイメージQとコンテナイメージXの交点に対して、k=kprev=1である。この場合、コンテナイメージXに関連する構造化データベースの下流ブランチにおいて、コンテナイメージQのための正しい配置位置が利用可能ではないことがある。コンテナイメージQは、構造化データベースの別のブランチ、例えば、兄弟ブランチと比較されてもよく、コンテナイメージXに関連するブランチは、訪問されたとしてマークされてもよい。
【0039】
第2の場合において、コンテナイメージQとコンテナイメージXは同一の重複を呈する。すなわち、コンテナイメージQとコンテナイメージXの交点に対して、k=m=nである。この場合において、コンテナイメージQとコンテナイメージXは同じイメージを表すことができる。コンテナイメージQがコンテナイメージXのタグバリアントである場合、コンテナイメージQはコンテナイメージXのエイリアスとして留意されてもよい。
【0040】
第3の場合において、コンテナイメージQは、コンテナイメージXの子孫であってもよい。すなわち、コンテナイメージQとコンテナイメージXの交点に対して、k=mおよびm<nである。この場合において、コンテナイメージQは、コンテナイメージXの子として前に識別されたコンテナイメージと比較されてもよい。コンテナイメージXの子が構造化データベース内で利用できない場合、またはコンテナイメージQがコンテナイメージXの子のブランチに属していないことが見出された場合、コンテナイメージQは、コンテナイメージXの子として構造化データベースに含まれてもよい。
【0041】
第4のケースにおいて、コンテナイメージQは、コンテナイメージXの祖先であってもよい。すなわち、コンテナイメージQとコンテナイメージXの交点に対して、k=nおよびn<mである。この場合、コンテナイメージQは、コンテナイメージXの親として構造化データベースに含まれてもよい。特に、コンテナイメージQは、コンテナイメージXの前の親とコンテナイメージXとの間の構造化データベースにスプライス(spliced)されてもよい。
【0042】
第5の場合において、コンテナイメージQとコンテナイメージXは共通の祖先を共有してもよい。すなわち、コンテナイメージQとコンテナイメージXとの交点に対して、k<mおよびk<nである。共通祖先がまだ観察されていない場合、本明細書にゴーストノードとして記載されているプレースホルダノードを、コンテナイメージQとコンテナイメージXとの両方の親として構造化データベースにスプライスしてもよい。共通祖先が観察されている場合、コンテナイメージQを共通祖先の子として構造化データベースに含めてもよい。
【0043】
いくつかの実施形態において、コンテナイメージの比較を再帰的に実行してもよい。所与の層でのコンテナイメージは、スタック内に維持されてもよい。幅優先検索が、コンテナイメージの第1の層で実行されてもよい。スタックが枯渇している場合、問い合わせコンテナイメージQは、そのレイヤにおけるコンテナイメージに対する兄弟ノードとして含まれてもよい。例えば、コンテナイメージQが既存のブランチに属することが見出されない場合、コンテナイメージQは、ベースノードから下降する新しいブランチ上に位置してもよい。
【0044】
図2A~2Dは、例示的な構造化データベースの様々な構築改訂を示す。
図2Aは、コンテナイメージAノード204が構造化データベース200に追加された初期構造化データベース200を示す。コンテナイメージAは、構造化データベース200において表される唯一のコンテナイメージであるので、ベースノード202は、コンテナイメージAノード204の親として示される。
図2Bは、コンテナイメージBがコンテナイメージAの先祖として識別され、したがって、コンテナイメージBノード206がベースノード202とコンテナイメージAノード204との間に位置する中間構造化データベース201を示す。
図2Cは、コンテナイメージCがコンテナイメージBと先祖を共有するものとして識別された別の中間構造化データベース203を示す。したがって、ゴーストノード208がベースノード202とコンテナイメージBノード206との間に位置する。コンテナイメージCノード210は、ゴーストノード208の子ノードおよびコンテナイメージBノード206の兄弟として配置される。
図2Dは、コンテナイメージDがコンテナイメージBおよびコンテナイメージCの祖先として識別されたさらに別の中間構造化データベース205を示す。したがって、
図2Cのゴーストノード208は、コンテナイメージDノード212によって置き換えられる。
【0045】
図1を参照すると、方法100は、ステップ108で、構造化データベースの構築中に導入される可能性のある欠陥に対処するために、構造化データベースを改訂することによって継続してもよい。いくつかの実施形態において、層ヒストリーに関連するタグの分類またはコンテナイメージに関連するコンパイルデータに基づいて、構造化データベースが改訂されてもよく、コンテナイメージのためのコンパイルデータは、コンテナイメージの層ヒストリーを使用して、コンテナイメージの形成を記述する。いくつかの実施形態において、コンパイルデータは、コンテナイメージのイメージ層を使用してコンテナイメージを生成するために使用されるコンテナファイルを含んでもよく、代替的または追加的に、コンパイルデータは、コンテナイメージのイメージ層を使用してコンテナイメージの生成に応答してシステムによって出力されるコンテナヒストリーを含んでもよい。
【0046】
いくつかの実施形態において、構造化データベースは、一般に、コンテナファイルを断片に分解し、第1のコンテナイメージからもたらされた断片のセットを第2のコンテナイメージからもたらされた断片のセットと比較することを含み得る、ファジィ祖先を介してパッチが当てられてもよい。構造化データベースにパッチを当てることは、ゴーストノードを埋めること、共有層エラーを改訂すること、主張された親として不正確に識別されたベースを有するコンテナイメージを改訂することなどを含んでもよい。構築された構造化データベースにおけるエラーは、構造化データベースが構築されるコンテナライブラリのエラーまたは不十分さの結果であってもよい。例えば、タグ等価クラスは、コンテナライブラリからエイジアウトしてもよいが、親コンテナイメージに関連したままであってもよい。代替的または追加的に、構築された構造化データベースにおけるエラーは、関連するコンテナレジストリおよびコマンドラインインターフェース(CLI)への更新の間の遅れからもたらされることがある。代替的または追加的に、ほぼ同一のコンテナファイルが、初期の行で単一の単語だけ異なっていると、重複しない層ハッシュをもたらすことがあり、構造化データベースにおけるコンテナイメージの不正確な配置をもたらすことがある。
【0047】
構成によっては、ファジィ祖先を用いて、ゴーストノードまたはゴーストイメージを埋めてもよい。ゴーストノードは、共通の祖先に関連する特定のコンテナイメージが識別されなかったコンテナイメージへの共通の祖先を表してもよい。ゴーストイメージは、公式コンテナイメージの目に見えないコンテナイメージバリアントを含むことが多い。いくつかの実施形態において、ゴーストノードに対応するゴーストイメージのスクリーニングは、スクリーニング公式コンテナイメージおよび関連するタグバリアントを優先してもよい。これらおよび他の実施形態において、ゴーストノードに対応するゴーストイメージの名は知られていないことがある。しかしながら、ゴーストイメージの一般的な外観は、ゴーストノードを囲むノードに対応するコンテナイメージの層ヒストリーに基づいて知られてもよい。
【0048】
いくつかの実施形態において、ゴーストイメージの既知の子供のコンテナファイルは、断片のセットに分割され得、これらの断片のセットは、断片の交点を決定するために比較されてもよい。子コンテナファイルの断片のセットの交点は、子コンテナイメージ間の祖先の重複の程度を識別してもよい。これらの祖先の重複の程度は、構造化データベースの様々なパッチを識別するのに役立ってもよい。例えば、子コンテナイメージの2つ以上のコンテナファイルからの断片のセットの交点は、ゴーストイメージのコンテナファイルに見出され得る断片のセットを示してもよい。
【0049】
例えば、「FROM ubuntu:16.04」、「RUN apt-get update」、および「RUN apt-get update -y」というテキストを含むコンテナファイルの子は、「FROM」、「ubuntu:16.04」、「RUN」、「apt-get」、「update」、「RUN」、「apt-get」、「update」、および「-y」などを含む断片のセットに分割されてもよい。同じ断片が別のコンテナファイルの子に見出された場合、それらの同じ断片が親のゴーストイメージのコンテナファイルに見出される可能性が高いことがある。子のコンテナイメージの2つ以上のコンテナファイルからの断片の交点は、親問い合わせイメージとして本明細書において記載されてもよい。
【0050】
いくつかの実施形態において、親問い合わせイメージを用いて、いとこノード、またいとこノード、叔母/叔父ノードなどのゴーストノードの候補について関係するノードのコンテナイメージをスクリーニングしてもよい。代替的または追加的に、広域スペクトルパネルを用いてもよく、構造化データベース内の全てのコンテナイメージおよびそれらのバリアントに対して親問い合わせイメージをスクリーニングしてもよい。構成によっては、スクリーニングは、親コンテナイメージのタグがどのタグに似得るかを考慮してもよく、特定のタグを定義していなくてもよい。正規化されたLevenshtein類似性および/またはJaccard類似性は、構造化データベースにおける親問い合わせイメージと他のコンテナイメージとの間の類似性の程度を定量化するために計算されてもよい。
【0051】
例えば、正規化された単語レベルのLevenshtein距離は、コンテナファイルAの断片のセット、または親問い合わせイメージAの断片のセット、およびコンテナファイルBの断片のセットに対して、以下のように計算されてもよい。
【数1】
ここで、Leven(A,B)は単語レベルのLevenshtein距離関数を表し、AはコンテナファイルAまたは親問い合わせイメージAの断片のセットを表し、BはコンテナファイルBの断片のセットを表し、max(|A|,|B|)は、大きい方のセットのセットサイズを表す。
【0052】
追加的または追加的に、Jaccard類似性指数は、コンテナファイルAの断片のセット、または親問い合わせイメージAの断片のセット、およびコンテナファイルBの断片のセットに対して、以下のように計算されてもよい。
【数2】
ここで、AはコンテナファイルAまたは親問い合わせイメージAの断片のセットを表し、BはコンテナファイルBの断片のセットを表す。
【0053】
場合によっては、第1のコンテナファイルは第2のコンテナファイルを包含することがあり、これは、第2のコンテナファイルが第1のコンテナファイルの祖先であることを示す。いくつかの実施形態において、祖先類似性は、コンテナファイルAの断片のセット、または親問い合わせイメージAの断片のセット、およびコンテナファイルBの断片のセットに対して、以下のように計算されてもよい。
【数3】
ここで、AはコンテナファイルAまたは親問い合わせイメージAの断片のセットを表し、BはコンテナファイルBの断片のセットを表す。コンテナファイルAまたは親問い合わせイメージAに対応するコンテナイメージAがコンテナファイルBに対応するコンテナイメージBの祖先である場合、An(A,B)は1に等しくてもよい。
【0054】
図3Aは、第1の例示的な構造化データベース300を示す。
図3Bは、構造化データベース300の改訂であり得る、第2の例示的な構造化データベース301を示す。構造化データベース300は、共有層エラーを含む改訂の前に構築された構造化データベースを示す。構造化データベース301は、共有層エラーを修正したパッチの後の構造化データベース300を示す。
【0055】
一例として、コンテナイメージC310およびコンテナイメージD312が同じイメージのタグバリアントであってもよく、コンテナイメージA306およびコンテナイメージB308がコンテナイメージC310の目に見えないタグバリアントの子孫であってもよい。例えば、コンテナイメージC310およびコンテナイメージD312は、共通の親コンテナイメージ、コンテナイメージE302を共有してもよく、いくつかの初期コンテナファイルラインを共有してもよい。コンテナイメージC310およびコンテナイメージD312のコンテナファイルラインは、テキストおよびコンテキストを共有してもよく、それらは、層ハッシュを共有してもよく、構造化データベース300の構築において重複を検出してもよい。ゴーストノード1 304は、構造化データベースの構築中に、コンテナイメージA306、コンテナイメージB308、コンテナイメージC310、およびコンテナイメージD312の理論化された親コンテナイメージとして、構造化データベース300に含まれていてもよい。
【0056】
しかし、構造化データベース301は、より正確であってもよい。ファジィ祖先を介した構造化データベース300の改訂は、構造化データベース301を反映するように構造化データベース300を改訂してもよい。例えば、親問い合わせイメージWとしてこの例において記載されたコンテナイメージC310およびコンテナイメージD312と関連するコンテナファイル断片の交点を生成してもよい。祖先の類似性は、コンテナイメージA306に対して、およびコンテナイメージB 308に対して、親問い合わせイメージWに対して決定されてもよい。親の問い合せイメージWのコンテナファイル断片の全てがイメージA306およびイメージB308のコンテナファイル断片に含まれることを祖先の類似性が示すことに応答して、構造化データベース300は、構造化データベース301によって示されるように、コンテナイメージA306およびコンテナイメージB308の理論化された親としてゴーストノード2 314を含むように改訂されてもよい。
【0057】
いくつかの実施形態において、ファジィ祖先は、ベース親の問題に対処するために用いられてもよい。構造化データベースの作成中に、親コンテナイメージとしてベースコンテナイメージを有するコンテナイメージと、親コンテナイメージがベースコンテナイメージとして誤って識別されたコンテナイメージとを区別することが難しいことがある。いくつかの例において、この難しさのために、ゴーストイメージの証跡が、最も初期の非ゴースト直接祖先を識別しようとベースノードまで追跡されてもよい。祖先のイメージレイヤへのわずかな更新が層ハッシュのセット全体を変更する場合、この難しさは悪化することがある。その結果、コンテナイメージは、構造化データベースにおける正しい配置ではなく、ベースコンテナイメージの子孫として配置されることがある。コンテナイメージのコンパイルデータと第1の層コンテナイメージのコンパイルデータとの間の祖先類似性を用いて、第1の層コンテナイメージに対して広域スペクトルスクリーンを実行することにより、正しい配置を促進することができる。構造化データベースは、祖先の類似性が閾値を超えていることに応じて、コンテナイメージを適切な位置に移動させるために改訂されてもよい。例えば、構造化データベースは、他のコンテナイメージのイメージバリアントとしてコンテナイメージを示すように改訂されてもよい。構成によっては、類似性がタグ間で変動し得るので、タグは、最良適合のために問い合わせられてもよい。
【0058】
図1を参照すると、本方法100は、ステップ110で、構造化データベースを使用して、問い合わせコンテナイメージに関連する親コンテナイメージを戻すことによって継続してもよい。例えば、構造化データベースにおいて、問い合わせコンテナイメージが識別されてもよい。問い合わせコンテナイメージを識別した後、構造化データベースを使用して、問い合わせコンテナイメージの親コンテナイメージを識別してもよい。代替的または追加的に、ベースコンテナイメージと問い合わせコンテナイメージとの間の全ての親コンテナイメージの表示を識別してもよい。
【0059】
いくつかの実施形態において、問い合わせコンテナイメージが構造化データベースに含まれる場合、問い合わせコンテナイメージの第1の非ゴースト祖先が構造化データベースから返されてもよい。代替的に、問い合わせコンテナイメージが構造化データベースに含まれない場合、問い合わせコンテナイメージの層ハッシュおよび層ヒストリーは、ステップ106および/またはステップ108の同じ手順に従うAPIプルを介してプルされ、構造化データベースに追加されてから、最初の非ゴースト祖先を返す。
【0060】
追加的に、いくつかの実施形態において、rpm、pip、npm、apt-getなどからのもののようなインストールされたパッケージは、親コンテナイメージに関連するコンテナファイルから抽出されてもよい。コンテナファイルのみを解析するテキストは、インストールされたすべてのパッケージをキャプチャするには不十分であることがある。Google container-diffのようなツールを用いて、関連するコンテナイメージのファイルシステムを検査して、そのようなパッケージを抽出してもよい。しかし、そのようなツールは、構造化データベースを利用することによって最小限に抑えられるパッケージリコールの制限を呈することがある。例えば、祖先コンテナイメージがパッケージを含む場合、子孫コンテナイメージは、削除されない限り、同じパッケージを含む可能性が高い。したがって、祖先のパッケージ情報は、テキスト解析のみと比較して、インストールされたパッケージのリコールを改善するために利用されてもよい。
【0061】
本明細書に開示されたこのおよび他のプロセスおよび方法に対して、プロセスおよび方法において実行される機能は、異なる順序で実装されてもよい。さらに、概略された動作は、例としてのみ提供され、動作のいくつかは、オプションであってもよく、より少ない動作に組み合わされてもよく、または実施形態の本質を損なうことなく、追加の動作に拡大されてもよい。
【0062】
図4は、本開示の少なくとも1つの実施形態による、データクラスタ化のために使用され得る例示的なシステム400を示すブロック図である。システム400は、プロセッサ410、メモリ412、通信ユニット416、ディスプレイ418、およびユーザインターフェースユニット420を含んでもよく、これらはすべて通信的に結合されてもよい。いくつかの実施形態において、システム400は、本開示に記載される1つ以上の方法を実行するために使用されてもよい。
【0063】
例えば、システム400は、
図1の方法100における動作のうちの1つ以上を実行するために使用されてもよい。
【0064】
一般的に、プロセッサ410は、様々なコンピュータハードウェアまたはソフトウェアモジュールを含む、任意の適切な特殊目的もしくは汎用コンピュータ、計算エンティティ、または処理デバイスを含んでもよく、任意の適用可能なコンピュータ可読記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ410は、マイクロプロセッサ、マイクロコントローラ、グラフィック処理ユニット(GPU)もしくはテンソル処理ユニット(TPU)などの並列プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラム命令を解釈および/または実行する、および/またはデータを処理するように構成されている任意の他のデジタルもしくはアナログ回路を含んでもよい。
【0065】
図4において単一のプロセッサとして示されているが、プロセッサ410は、本明細書に記載された任意の数の動作を個別にまたは集合的に実行するように構成された任意の数のネットワークまたは物理的位置にわたって分散された任意の数のプロセッサを含んでもよいことが理解される。いくつかの実施形態において、プロセッサ410は、メモリ412に記憶されたプログラム命令を解釈および/または実行する、および/またはデータを処理してもよい。いくつかの実施形態において、プロセッサ410は、メモリ412に記憶されたプログラム命令を実行してもよい。
【0066】
例えば、いくつかの実施形態において、プロセッサ410は、タスク実行に関係するメモリ412に記憶されたプログラム命令を実行し、システム400が、命令によって指示されるように、それに関連する動作を実行するか、または実行の指示することができるようにする。これらおよび他の実施形態において、命令は、
図1の方法100の1つ以上の動作を実行するために使用されてもよい。
【0067】
メモリ412は、コンピュータ実行可能な命令もしくはデータ構造を搬送するか、またはそれが記憶されるためのコンピュータ可読記憶媒体、または1つ以上のコンピュータ可読記憶媒体を含んでもよい。そのようなコンピュータ可読記憶媒体は、プロセッサ410のような汎用または専用コンピュータによってアクセスされ得る任意の利用可能な媒体であってもよい。
【0068】
例として、限定するものではないが、そのようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能なプログラマブル読み取り専用メモリ(EEPROM)、コンパクトディスク読み出し専用メモリ(CD-ROM)、もしくは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気ストレージ、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、またはコンピュータ実行可能な命令もしくはデータ構造の形態で特定のプログラムコードを搬送または記憶するために使用されてもよく、汎用もしくは特殊目的のコンピュータによってアクセスされ得る任意の他の記憶媒体を含む非一時的なコンピュータ可読記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ可読記憶媒体の範囲内に含まれてもよい。
【0069】
コンピュータ実行可能な命令は、例えば、プロセッサ410に本開示に記載されたような特定の動作または動作のグループを実行させるように構成されている命令およびデータを含んでもよい。これらおよび他の実施形態において、本開示で説明されるような「非一時的」という用語は、In re Nuijten, 500 F.3d 1346のFederal Circuit decision(Fed. Cir. 2007)において特許可能な主題の範囲外であることが分かったタイプの一時的媒体のみを除外するように解釈されるべきである。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれてもよい。
【0070】
通信ユニット416は、ネットワークを介して情報を送信または受信するように構成された任意のコンポーネント、デバイス、システム、またはそれらの組み合わせを含んでもよい。いくつかの実施形態において、通信ユニット416は、他の場所、同じ場所での他のデバイス、または同じシステム内の他のコンポーネントとでさえも通信してもよい。例えば、通信ユニット416は、モデム、ネットワークカード(無線または有線)、赤外線通信デバイス、無線通信デバイス(アンテナなど)、および/またはチップセット(Bluetooth(登録商標)デバイス、802.6デバイス(例えば、メトロポリタンエリアネットワーク(MAN))、WiFi(登録商標)デバイス、WiMaxデバイス、携帯電話通信設備など)などを含んでもよい。通信ユニット416は、本開示に記載されたネットワークおよび/または任意の他のデバイスまたはシステムとでデータが交換されることを許可してもよい。
【0071】
ディスプレイ418は、LCD、LED、点字端末、または他のタイプのディスプレイなどの1つ以上のディスプレイとして構成されてもよい。ディスプレイ418は、プロセッサ410によって指示されるように、ビデオ、テキストキャプション、ユーザインターフェース、および他のデータを提示するように構成されてもよい。
【0072】
ユーザインターフェースユニット420は、ユーザがシステム400とインターフェースすることを可能にする任意のデバイスを含んでもよい。例えば、ユーザインターフェースユニット420は、デバイスでもとりわけ、マウス、トラックパッド、キーボード、ボタン、カメラ、および/またはタッチスクリーンを含んでもよい。ユーザインターフェースユニット420は、ユーザからの入力を受信し、プロセッサ410に入力を提供してもよい。いくつかの実施形態では、ユーザインターフェースユニット420およびディスプレイ418は、組み合わせられてもよい。
【0073】
本開示の範囲から逸脱することなく、システム400に修正、追加、または省略が行われてもよい。例えば、いくつかの実施形態において、システム400は、明示的に示されるいか、または記載されないことがある任意の数の他のコンポーネントを含んでもよい。さらに、特定の実装に応じて、システム400は、図示および説明されたコンポーネントのうちの1つ以上を含まなくてもよい。
【0074】
上記に示したように、本明細書に記載された実施形態は、以下により詳細に論じられるように、種々のコンピュータハードウェアまたはソフトウェアモジュールを含む特殊目的または汎用コンピュータ(例えば、
図4のプロセッサ410)の使用を含んでもよい。さらに、上記に示したように、本明細書に記載された実施形態は、コンピュータ実行可能な命令もしくはデータ構造を搬送するか、それが記憶されるためのコンピュータ可読媒体(例えば、
図4のメモリ412)を使用して実装されてもよい。
【0075】
いくつかの実施形態において、本明細書に記載された異なるコンポーネント、モジュール、エンジン、およびサービスは、(例えば、別個のスレッドとして)コンピューティングシステムで実行されるオブジェクトまたはプロセスとして実装されてもよい。本開示に記載されたシステムおよび方法のいくつかは、一般的に、(汎用ハードウェアに記憶される、および/またはそれによって実行される)ソフトウェアで実装されるものとして記載されているが、特定のハードウェア実装またはソフトウェアと特定のハードウェア実装との組み合わせも可能であり、かつそのことが企図されている。
【0076】
一般的なプラクティスに従って、図面に示された様々な特徴は、縮尺通りに描かれないことがある。本開示において提示される図示は、いかなる特定の装置(例えば、装置、システムなど)または方法の実際の図であることも意図しておらず、単に、本開示の様々な実施形態を記載するために用いられる理想化された表現である。したがって、様々な特徴の寸法は、明確にするために任意に拡大または縮小されてもよい。追加的に、図面の一部は、明確にするために簡略化されてもよい。したがって、図面は、所与の装置(例えば、デバイス)のコンポーネントの全て、または特定の方法の全ての動作を描かないことがある。
【0077】
本明細書において、特に添付の特許請求の範囲(例えば、添付の特許請求の範囲の本文)において使用される用語は、一般的に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるが、これに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むが、これに限定されない」解釈されるべきであるなど)。
【0078】
さらに、特定の数の導入された請求項の規定が意図されている場合、そのような意図は請求項に明示的に規定され、そのような規定がない場合、そのような意図は存在しない。例えば、理解を助けるために、以下の添付の特許請求の範囲は、請求項の規定を導入するために、「少なくとも1つ」および「1つ以上」の導入語句の使用を含有することがある。しかし、そのような語句の使用は、不定冠詞「a」または「an」による請求項の規定の導入が、そのような導入された請求項の規定を含有する任意の特定の請求項を、ただ1つのそのような規定を含有する実施形態に限定することを示唆するように解釈されるべきではなく、これは、同じ請求項が、導入語句「1つ以上」または「少なくとも1つ」および「a」または「an」(例えば、「a」および/または「an」は、「少なくとも1つ」または「1つ以上」を意味すると解釈されるべきである)などの不定冠詞を含むときでも同様であり、同じことは、請求項の規定を導入するために使用される不定冠詞の使用の場合に当てはまる。
【0079】
追加的に、導入された請求項の規定の特定の数が明示的に規定されている場合であっても、そのような規定は、少なくとも規定された数を意味すると解釈されるべきであると理解する(例えば、「2という規定」の単なる規定では、他の修飾語なしでは、少なくとも2つの規定、または2つ以上の規定を意味する)。さらに、「A、BおよびCのうちの少なくとも1つ」または「A、BおよびCなどのうちの1つ以上」と類似の慣習が使用されている場合、一般的に、そのような構造は、A単独、B単独、C単独、AとB、AとC、BとC、またはAとBとCなどを含むことが意図されている。例えば、「および/または」という用語の使用は、このように解釈されることを意図している。
【0080】
さらに、明細書、特許請求の範囲、または図面のいずれかにあるかを問わず、2つ以上の代替的な用語を提示する任意の言葉または語句は、その用語のうちの1つ、用語のうちのいずれか、またはその用語の両方を企図するように理解されるべきである。例えば、語句「AまたはB」は、「A」もしくは「B」または「AおよびB」の可能性を含むように理解されるべきである。
【0081】
さらに、用語「第1」、「第2」、「第3」などの使用は、要素の特定の順序または数を意味するために本明細書では必ずしも使用されない。一般に、用語「第1」、「第2」、「第3」などは、一般的な識別子として異なる要素を区別するために使用される。用語「第1」、「第2」、「第3」などが特定の順序を意味していることを示すことなく、これらの用語が特定の順序を意味していると理解すべきではない。さらに、「第1」、「第2」、「第3」などの用語が要素の特定の数を暗示することを示さずに、これらの用語は、要素の特定の数を暗示していると理解すべきではない。例えば、第1のウィジェットは、第1の側面を有し、第2のウィジェットは第2の側面を有していると記載されてもよい。第2のウィジェットに関する「第2の側面」という用語の使用は、第2のウィジェットのそのような側面を第1のウィジェットの「第1の側面」と区別し、第2のウィジェットが2つの側面を有していることを暗示しないようにすることができる。
【0082】
本明細書に規定されたすべての例および条件付き言語は、本発明および発明者が当該技術分野を促進するために寄与した概念を理解する際に読者を助けるための教育的目的とすることが意図されており、このように具体的に規定された例および条件に限定されるものではないと解釈されるべきである。本開示の実施形態が詳細に記載されているが、これに対して本開示の範囲から逸脱することなく、様々な変更、置換、および交換が行われ得ると理解されたい。
【0083】
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
親コンテナイメージを提供する方法であって、
コンテナイメージの複数のコンテナイメージ名を取得することであって、前記コンテナイメージの各々は、プロセスを実行するための静的実行可能なソフトウェアを含む、ことと、
前記複数のコンテナイメージ名に対応する前記コンテナイメージの各々に対して1つ以上の層ハッシュを取得することであって、前記層ハッシュの各々は、前記コンテナイメージのうちの1つのイメージ層のハッシュを含む、ことと、
前記コンテナイメージ間の関係に基づいて、前記コンテナイメージの構造化データベースを構築することであって、前記コンテナイメージ間の前記関係は、前記コンテナイメージの各々に対する前記1つ以上のハッシュを使用して識別される、ことと、
第1のコンテナイメージに関する問い合わせに応答して、前記第1のコンテナイメージの親コンテナイメージを返すことであって、前記親コンテナイメージは、前記構造化データベースを使用して識別される、ことと、を含む、方法。
(付記2)
前記コンテナイメージの前記構造化データベースは、前記コンテナイメージを取得することなく、かつ前記コンテナイメージを使用することなく構築される、付記1に記載の方法。
(付記3)
前記構造化データベースは、ベースノードを除く単一の親ノードを含むツリー構造における全てのノードを有するツリー構造に基づく、付記1に記載の方法。
(付記4)
前記コンテナイメージの前記構造化データベースを構築することは、2つ以上のコンテナイメージに関連する層ハッシュの比較に基づいて、前記構造化データベース内にコンテナイメージを配置することを含む、付記1に記載の方法。
(付記5)
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間に非ベース層が重複していないことは、前記第1のコンテナイメージが第2のコンテナイメージに関連する前記構造化データベースのブランチに位置していないことを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の同一の重複は、前記第1のコンテナイメージと前記第2のコンテナイメージが同一であることを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれることは、前記第2のコンテナイメージが前記構造化データベースにおいて前記第1のコンテナイメージの子孫であることを示す、付記4に記載の方法。
(付記6)
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれておらず、前記第2の層ハッシュのセットの全ての層ハッシュが前記第1の層ハッシュのセットに含まれていないことは、前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースにおいて共通の祖先を共有していることを示し、
前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースの一部ではない共通の祖先を共有していることが示されている場合、前記構造化データベースを構築することは、前記構造化データベースにおけるプレースホルダノードを、前記第1のコンテナイメージと前記第2のコンテナイメージの親ノードとして配置することを含む、付記4に記載の方法。
(付記7)
前記層ハッシュに関連するタグの分類または前記コンテナイメージに関連するコンパイルデータに基づいて、前記構造化データベースを改訂することをさらに含み、コンテナイメージのための前記コンパイルデータは、前記コンテナイメージの層ハッシュを使用して、前記コンテナイメージの形成を記述する、付記1に記載の方法。
(付記8)
前記コンパイルデータは、前記コンテナイメージのイメージ層を使用して、前記コンテナイメージを生成するために使用されるコンテナファイルである、付記7に記載の方法。
(付記9)
前記コンパイルデータは、前記コンテナイメージの前記イメージ層を使用して、前記コンテナイメージの生成に応答して、システムによって出力されるコンテナヒストリーである、付記7に記載の方法。
(付記10)
前記コンテナイメージに関連する前記コンパイルデータに基づいて、前記構造化データベースを改訂することは、
前記構造化データベースにおける親コンテナイメージとして、プレースホルダノードを有する第1のコンテナイメージと第2のコンテナイメージを識別することであって、前記プレースホルダノードは、親コンテナイメージが存在するがまだ識別されていないことを示す、ことと、
前記第1のコンテナイメージの前記コンパイルデータを前記第2のコンテナイメージの前記コンパイルデータと比較して、前記プレースホルダノードの層特性を決定することと、
前記プレースホルダノードの前記層特性を前記コンテナイメージの層特性と比較して、前記プレースホルダノードまたは前記プレースホルダノードの層特性を識別することと、を含む、付記7に記載の方法。
(付記11)
前記コンテナイメージに関連する前記コンパイルデータに基づいて、前記構造化データベースを改訂することは、前記プレースホルダノードの前記層特性と前記コンテナイメージの層特性との比較に基づいて、前記第1のコンテナイメージと前記第2のコンテナイメージの親ノードとして第2のプレースホルダノードを作成することをさらに含む、付記10に記載の方法。
(付記12)
動作を実行するプロセッサによって実行可能なプログラミングコードを内部に符号化した非一時的なコンピュータ可読媒体であって、前記動作は、
コンテナイメージの複数のコンテナイメージ名を取得することであって、前記コンテナイメージの各々は、プロセスを実行するための静的実行可能なソフトウェアを含む、ことと、
前記複数のコンテナイメージ名に対応する前記コンテナイメージの各々に対して1つ以上の層ハッシュを取得することであって、前記層ハッシュの各々は、前記コンテナイメージのうちの1つのイメージ層のハッシュを含む、ことと、
前記コンテナイメージ間の関係に基づいて、前記コンテナイメージの構造化データベースを構築することであって、前記コンテナイメージ間の前記関係は、前記コンテナイメージの各々に対する前記1つ以上のハッシュを使用して識別される、ことと、
第1のコンテナイメージに関する問い合わせに応答して、前記第1のコンテナイメージの親コンテナイメージを返すことであって、前記親コンテナイメージは、前記構造化データベースを使用して識別される、ことと、を含む、非一時的なコンピュータ可読媒体。
(付記13)
前記コンテナイメージの前記構造化データベースは、前記コンテナイメージを取得することなく、かつ前記コンテナイメージを使用することなく構築される、付記12に記載の非一時的なコンピュータ可読媒体。
(付記14)
前記コンテナイメージの前記構造化データベースを構築することは、2つ以上のコンテナイメージに関連する層ハッシュの比較に基づいて、前記構造化データベース内にコンテナイメージを配置することを含む、付記12に記載の非一時的なコンピュータ可読媒体。
(付記15)
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間に非ベース層が重複していないことは、前記第1のコンテナイメージが第2のコンテナイメージに関連する前記構造化データベースのブランチに位置していないことを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の同一の重複は、前記第1のコンテナイメージと前記第2のコンテナイメージが同一であることを示し、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれることは、前記第2のコンテナイメージが前記構造化データベースにおいて前記第1のコンテナイメージの子孫であることを示す、付記14に記載の非一時的なコンピュータ可読媒体。
(付記16)
前記コンテナイメージの前記構造化データベースを構築することは、前記構造化データベース内に配置されていない第1のコンテナイメージに対応する第1の層ハッシュのセットを、前記構造化データベース内に配置されている第2のコンテナイメージに対応する第2の層ハッシュのセットと比較することを含み、
前記第1の層ハッシュのセットと前記第2の層ハッシュのセットの間の部分的な重複であって、前記第1の層ハッシュのセットの全ての層ハッシュが前記第2の層ハッシュのセットに含まれておらず、前記第2の層ハッシュのセットの全ての層ハッシュが前記第1の層ハッシュのセットに含まれていないことは、前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースにおいて共通の祖先を共有していることを示し、
前記第1のコンテナイメージと前記第2のコンテナイメージが前記構造化データベースの一部ではない共通の祖先を共有していることが示されている場合、前記構造化データベースを構築することは、前記構造化データベースにおけるプレースホルダノードを、前記第1のコンテナイメージと前記第2のコンテナイメージの親ノードとして配置することを含む、付記14に記載の非一時的なコンピュータ可読媒体。
(付記17)
前記層ハッシュに関連するタグの分類または前記コンテナイメージに関連するコンパイルデータに基づいて、前記構造化データベースを改訂することをさらに含み、コンテナイメージのための前記コンパイルデータは、前記コンテナイメージの層ハッシュを使用して、前記コンテナイメージの形成を記述する、付記12に記載の非一時的なコンピュータ可読媒体。
(付記18)
前記コンパイルデータは、前記コンテナイメージのイメージ層を使用して、前記コンテナイメージを生成するために使用されるコンテナファイルである、付記17に記載の非一時的なコンピュータ可読媒体。
(付記19)
前記コンパイルデータは、前記コンテナイメージの前記イメージ層を使用して、前記コンテナイメージの生成に応答して、システムによって出力されるコンテナヒストリーである、付記17に記載の非一時的なコンピュータ可読媒体。
(付記20)
前記コンテナイメージに関連する前記コンパイルデータに基づいて、前記構造化データベースを改訂することは、
前記構造化データベースにおける親コンテナイメージとして、プレースホルダノードを有する第1のコンテナイメージと第2のコンテナイメージを識別することであって、前記プレースホルダノードは、親コンテナイメージが存在するがまだ識別されていないことを示す、ことと、
前記第1のコンテナイメージの前記コンパイルデータを前記第2のコンテナイメージの前記コンパイルデータと比較して、前記プレースホルダノードの層特性を決定することと、
前記プレースホルダノードの前記層特性を前記コンテナイメージの層特性と比較して、前記プレースホルダノードまたは前記プレースホルダノードの層特性を識別することと、を含む、付記17に記載の非一時的なコンピュータ可読媒体。
【符号の説明】
【0084】
400 システム
410 プロセッサ
412 メモリ
416 通信ユニット
418 ディスプレイ
420 ユーザインターフェースユニット