Container Registryとは、コンテナ・イメージを保存およびアクセスのために保管するデータ・リポジトリー(または複数のリポジトリ)です。コンテナ・イメージは変更されない静的ファイルであり、実行可能なコードを保持し、ITインフラ上で分離された状態で実行されます。
Container Registryの大きな利点の1つは、KubernetesやDockerといったコンテナ・オーケストレーション・システムやプラットフォームと容易に接続できる点です。
コンテナを利用したアプリケーション開発の過程においては、DevOpsの一環としてContainer Registryを活用することができ、継続的インテグレーション(CI)ワークフローや継続的デリバリー(CD)ワークフローとの最適な統合が可能になります。これらのワークフローはいずれもソフトウェア開発における中核的なアクティビティです。CIとCDはどちらも自動化を前提とし、頻繁なコード変更に対応するように設計されています。主な違いは、CIが将来のリリースに向けたコードの準備を行うのに対し、CDはコードの実際のリリースに関わるという点です。Container Registryは、両方のワークフローをサポートします。
Container Registryには2種類あります。
Container Registryはコンテナ・イメージを保管し、ユーザーがイメージをレジストリーにアップロードしたり(「プッシュ」と呼ばれるプロセス)、別のシステムにダウンロードしたり(「プル」と呼ばれるプロセス)できるようにします。
Container Registryは単独で使用することも、他のContainer Registryと組み合わせて使用することも可能です。複数のコンテナがクラウド・サービスの提供を目的として1つの運用単位に統合される場合、その機能は、共通の成果を生み出すために密接に連携して働くエコシステムの構成要素に似た動作をします。
Container Registryは、コンテナ・イメージに関するメタデータを記述するためにObject Storageを使用します。この方法は、そのようなメタデータを正常に転送する手段にはなりますが、本質的に制限があります。たとえば、複数のイメージを含む可能性のあるデータの場合、使用可能なリスティング・タグの数には限りがあります。
依存関係コンテナは、もう1つのストレージ手法です。これにより、アプリケーション内の依存関係の管理、登録、解決が可能になります。プログラミングの文脈において、依存関係とは、あるオブジェクトやプロセスが機能するために、別のオブジェクトが先に存在または実行されている必要があるという状況を指します。
このような依存関係は依存関係コンテナによって管理されます。依存関係コンテナは、テストを簡素化し、スケーラビリティを高め、コードの結合(プログラムされたオブジェクト間の過度な相互依存)を最小限に抑えるのに役立ちます。結合が強すぎると、エラーの発生やバージョン管理上の問題を引き起こす可能性があります。
オンライン・セキュリティーの重要性が継続的かつ切迫した課題であることを踏まえると、リポジトリーへのアクセスを許可された個人の認証は極めて重要です。この認証は、当該Container Registryに固有の一連の権限に基づいて行われます。権限は、そのContainer Registry上のコンピューター・リソースを使用することが許可されている人物を定義するものです。
ランタイムの概念は非常に重要です。コンテナ・ランタイムとは、ホスト・システム上でコンテナを機能させるためのソフトウェアです。ランタイムは一連の手順を用いてコンテナを作成します。これらのステップには、コンテナを構成し、その環境を初期化するまでの全過程が含まれており、その際にはアプリケーションとその依存関係を保持するコンテナ・イメージの指示に従います。
コンテナが形成された後も、ランタイムは引き続き重要な役割を果たします。すなわち、コンテナのライフサイクルを管理し、その稼働状態を監視し、不要になった際にはリソースを解放する、といった作業を行います。
Container Registryは、ロード・バランシングもサポートしています。コンテナ・ネイティブなロード・バランシングでは、バランサーのトラフィックが、あらかじめ想定された受信先に直接ルーティングされます。このように、Container Registryはロード・バランサーと連携して機能し、トラフィックを余分なネットワーク経路に通す必要をなくします。
Container Registryには、次のような多くのメリットがあります。
Container Registryは、イメージを長期保存するための専用の保管場所を持つことで、運用の明確性を高めます。プロダクション・アーティストやソフトウェア開発者は、しばしば大量のアセットに悩まされることがあります。Container Registryは、これらのアセットを1か所に集約することで、この問題を軽減します。
Container Registryは、特に優先度の高いタイミングにおいて、イメージの正確な所在が不明なことによって生じるパフォーマンスの遅延を防ぐのに役立ちます。Container Registryは、いつでも確認できるインベントリ(一覧)を提供することで、この問題を解決します。
レジストリーは、あらゆるコンポーネントやアプリケーションの信頼できる唯一の情報源を形成し、その構成内容に対して常に透明性を確保します。Container Registryを利用することで、最も新しいバージョンが常に使用可能または複製可能な状態に保たれ、最適なバージョン管理が実現されます。
また、Container Registryにはイメージに対する強化されたセキュリティ対策も備わっています。アクセス・プロトコルによって、セキュリティーの観点からイメージを保護するとともに、脆弱性スキャンにより、ユーザーはイメージ内部を深く確認し、潜在的な問題を発見することができます。
以下のアクティビティでは、Container Registryが広く活用されています。
ソフトウェア開発はContainer Registryの主な用途はソフトウェア開発であり、そもそもソフトウェア開発者を支援するために、イメージを保管・アクセス・共有できる作業スペースを提供する目的で作られました。
社内でソフトウェア・アプリケーションを設計・提供する組織にとって、プライベートContainer Registryは、必要不可欠なインフラとみなされることが一般的です。プライベート・レジストリーを利用することで、ユーザーはソフトウェアのサプライチェーンに対して、より高いレベルでの制御を実現できます。
また、多くのContainer Registryは、マイクロサービスのユーザーに対し、コンテナ・クラスター内で特定のマイクロサービスを特定・接続するプロセスを明確化することで支援を行っていますこのようなレジストリーは、イメージに名前と仮想IPアドレスを割り当てるドメイン・ネーム・システム(DNS)サービスを提供します。
Container Registryは、そのモジュール化され軽量な特性により、アプリケーションの迅速な反復を促進します。さらに、デプロイにおけるその他の利点としては、レジストリのポータビリティーと一貫性が挙げられます。
Container Registryは、遺伝学データのサポートやゲノム研究の推進など、特定の科学的目的に対応できるようカスタマイズされつつあります。研究成果は他の形式でも容易に再現できるため、主要なコードやアーティファクトを共有することが可能になります。
コンテナ・オーケストレーションの主なプロバイダーは2つあり、これらがContainer Registryの利用において大きなシェアを占めています。
Dockerは、アプリケーションの作成、デプロイ、実行の複雑さを軽減するために2013年に開発・導入されたコンテナ・オーケストレーション・システムです。Docker は、軽量で移植性が高く、自己完結型のコンテナを、インフラに依存せずあらゆるプラットフォーム上で実行できる手段として広く支持されるようになり、人気を集めています。この使いやすさの評価によって、Docker は人工知能(AI)や機械学習(ML)に特化したアプリケーションをデプロイする手段としても選ばれるようになりました。
同様に、Dockerコンテナは非常に高い可搬性を持ち、インフラを問わず、あるマシンから別のマシンへ容易に移動させることができます。さらに、Dockerを使用すれば、AIやMLのアプリケーションをローカルマシン、エッジデバイス、あるいはクラウド・サーバーなどの別の環境に導入するのも比較的容易であるという利点があります。
Kubernetesは、オープンソースのコンテナ・オーケストレーション・プラットフォームです。2013年に開始され、ギリシャ語で「操縦士」を意味する言葉にちなんで名付けられたKubernetesは、管理、デプロイ、スケーリングなど、さまざまなソフトウェア・プロセスを自動化するために使用されます。
Kubernetesサービスでは、1台以上のコンピューター(仮想マシンまたはBare Metal Serversのいずれか)がKubernetesクラスター内で接続され、さまざまな規模や種類のコンテナ・ワークロードを実行できる環境が構成されます。Kubernetesは、通常Helmチャートとともに導入されます。Helmチャートとは、Kubernetesクラスター内のさまざまなリソースを記述し、それらのリソースを1つのアプリケーションとしてパッケージ化するためのファイル群です。
Kubernetesは、コンテナ化された機械学習(ML)アプリケーションの利用や容易なスケーリングを可能にし、さまざまなMLフレームワークやツールをサポートしています。また、KubernetesはAIのトレーニング・ワークロードを実行するためのプラットフォームとしても利用できます。
DockerとKubernetesは多くの点で似ていますが、それぞれの持つスケールにおいて違いがあります。Dockerは本質的にはコンテナ・ランタイムであるのに対し、Kubernetesは複数のコンテナ・ランタイム上でコンテナを実行・管理するために設計された、包括的なプラットフォームです。この違いを示す例として、Kubernetesは非常に大規模であるため、DockerはKubernetesがサポートする複数のコンテナ・ランタイムのうちの1つにすぎない、という点が挙げられます。
Container Registryプロバイダーの市場は常に進化しており、どの時点においても新たな企業が参入したり、撤退したりしています。それでも、ここで紹介するプロバイダーは、この分野において確固たる評判を築いてきた企業です。
Red Hat OpenShift on IBM Cloudは、フルマネージドのOpenShiftコンテナ・プラットフォーム(OCP)です。
コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントにより、コンテナ化されたワークロードを実行およびスケールアップします。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。