コンテナレジストリは、使用されていないコンテナイメージの保存場所を提供し、イメージを保護するとともに、管理者がイメージ管理のポリシーを設定できるようにします。
アプリケーションの実行に必要なすべての依存関係を含む軽量なファイルであるコンテナは、複数の環境で実行したり、環境間で転送したりできます。コンテナレジストリには、コンテナイメージを保存するリポジトリが格納され、開発者がコンテナ管理の運用を自動化できる機能も備わっています。
以下では、コンテナレジストリ技術と、市場をリードするコンテナレジストリプロバイダーについて詳しく説明します。
適切なコンテナレジストリプロバイダーの選び方
関連記事:主要コンテナソリューション
主要なコンテナレジストリプロバイダー
Azure Container Registry
Azure Container Registryは、クラウドプロバイダーMicrosoft Azureが提供するストレージソリューションです。DockerとOpen Container Initiative(OCI)イメージの両方をサポートします。Azureは、レジストリに保存されるコンテナ以外のイメージなど、その他すべてのOCIアーティファクトにも対応しています。管理者は、Azureレジストリとの間でアーティファクトをプッシュ
およびプルできます。
Azure Container Registryは、Azure Kubernetes ServiceおよびAzure Red Hat OpenShiftという、ほかの2つのコンテナソリューションに接続できます。Azure Kubernetes ServiceとAzure Container Registryの両方がAzure Stack Hub上で稼働している場合、ユーザーは保存されたコンテナイメージをデプロイしてAKSで実行できます。
地理的レプリケーションにより、企業はレジストリを別のAzure地理リージョンに複製できるため、コンテナホストに最も近いリージョンからイメージをプルできます。物理的な近接性によりデータ転送コストを削減できる可能性があり、あるリージョンで障害が発生した場合の耐障害性向上にも役立ちます。
Azureには1日単位の料金プランが3つあります。
- Basic:$0.167、ストレージ10 GB
- Standard:$0.667、ストレージ100 GB
- Premium:$1.667、ストレージ500 GB
主な差別化要因
- Azureの他のコンテナソリューションとの統合
- 耐障害性を高めるレジストリの地理的レプリケーション
- DockerおよびOCIイメージ、OCIアーティファクトのサポート
Docker Hub
Docker Hubは、コンテナレジストリに料金を支払ったり、管理したりしたくない企業向けの無料のホスティング型コンテナライブラリです。開発者同士のコラボレーションに適しており、Docker Hubを使えば、ソフトウェアエンジニアはコンテナイメージを一般公開したり、
他の開発者とコミュニケーションを取ったりできます。ただし、コンテナイメージのセキュリティを高めたい企業や、外部の開発者と共有する予定がない企業は、Docker Hubの有料プランに加入してプライベートな環境を利用できます。
Hubのユーザーは、Dockerが公式に提供する高品質なイメージにもアクセスできます。さらに、Dockerによってイメージ品質が検証された外部ベンダーから、イメージをプッシュおよびプルできます。自社で主にDockerイメージを使用しており、開発者がコミュニティのコンテナリソース、特に品質が事前に検証されたリソースにアクセスしたい場合は、Docker Hubを検討するとよいでしょう。
開発者がコンテナイメージにBitbucketまたはGitHubを使用している場合、それらのプラットフォーム内からDocker Hubへイメージをプッシュできます。
Dockerは、Pro、Team、Businessという3つの有料エンタープライズプランを提供しています。これらのプランにはHubへのアクセスが含まれます。
主な差別化要因
- 小規模企業向けの無料利用とパブリックコンテナイメージの保存
- 公式Dockerイメージおよび検証済み外部ベンダーイメージへのアクセス
- BitbucketおよびGitHubとの統合
関連記事:Bitbucket対GitHub:DevOpsツール比較
Red Hat Quay
Red Hatは、顧客のイメージ向けにプライベートコンテナレジストリQuayを提供し、GitHubやBitbucketなどの開発ツールとの統合にも対応しています。ユーザーは、これらのリポジトリからデータをプルして新しいコンテナをデプロイできます。Red Hatはリポジトリタグの履歴を2週間保持しており、開発者は特定のイメージバージョンにロールバックするために利用できます。もし
開発チームが、リポジトリ内で5日前に変更されたイメージのバージョンを使いたいと判断した場合、タグを使ってそのバージョンを指定できます。
Red Hatは、サードパーティー製の統合機能を使ってコンテナイメージの脆弱性をスキャンします。認証とアクセス制御については、企業が既存のプロトコルであるLightweight Directory Access Control(LDAP)やオープン認証(OAuth)を利用できるほか、チームによるリポジトリへのアクセス権限も作成できます。
Red Hatは、コンテナを保存するための複数のストレージバックエンドをサポートしています。監査用に、Quayはコントロールプレーンとデータプレーンのイベント、アプリケーションプログラミングインターフェース(API)の操作、ユーザーインターフェース(UI)の操作に関するログを作成します。これにより管理者は、リポジトリやイメージにどのような変更が加えられたかを把握しやすくなります。
Quayのエンタープライズ料金については、Red Hatの営業チームに問い合わせる必要があります。
主な差別化要因
- 耐障害性を高める地理的レプリケーション
- GitHubおよびBitbucketとの統合
- コントロールプレーン、データプレーン、APIイベントの監査ログ
Amazon ECR
Amazon Elastic Container Registry(ECR)は、AWSが提供するレジストリサービスです。AWSは、最大500 MBのプライベートリポジトリストレージを提供する無料利用枠を用意しています。ECRは完全マネージド型で、開発チームはコードを記述し、それをDockerイメージとしてパッケージ化して、
レジストリに保存できます。チームはレジストリからコンテナをプルし、Amazon Elastic Kubernetes Service(EKS)やElastic Container Service(ECS)で実行できます。
ECRでは、最も正確なバージョンに基づいて、コンテナイメージを保存する期間を定める自動ポリシーを設定できます。ECRは、AWSのアイデンティティーおよびアクセス管理(IAM)を使用した権限によるプライベートコンテナレジストリをサポートし、リソースへのユーザーアクセスを制御します。権限を持つユーザーやEC2インスタンスは、リポジトリ内のイメージにアクセスできます。
クロスリージョンレプリケーションにより、企業は別のリージョンにリポジトリを複製し、自リージョンのストレージに障害が発生した場合にコンテナイメージを保護できます。この設定はリージョンごとに個別に構成します。
無料利用枠を超えた場合、プライベートリポジトリのストレージ料金は1 GBあたり月額$0.10です。プッシュおよびプルしたイメージのデータ転送にも料金がかかり、費用はリージョンによって異なります。
主な差別化要因
- Amazon EKSおよびECSとの統合に対応
- イメージバージョン向けの自動ストレージポリシー
- プライベートレジストリへのユーザーアクセスを管理するAWS IAM
関連記事:主要なコンテナセキュリティツール
Harbor Container Registry
Harborは、Kubernetes環境およびDockerをサポートするシステム上で稼働するオープンソースのコンテナレジストリです。Harborは、オープンソースのサードパーティーソリューションであるTrivyとClairを使って、コンテナイメージやアーティファクトの静的脆弱性スキャンを実行します。
選択したリポジトリの脆弱性列には、各アーティファクトのスキャン状況が表示されます。管理者は、1つのアーティファクトだけをスキャンすることも、リポジトリ内のすべてのアーティファクトをスキャンすることもできます。Harborには、脆弱性の検出有無と深刻度を示す6種類の色が用意されています。
HarborはNotaryおよびCosignと統合でき、レジストリからプルしたイメージの信頼性を高められます。NotaryとCosignはコンテナイメージやアーティファクトを検証して署名します。管理者は、いずれか一方または両方のツールで検証されたイメージだけをプルするようHarborを設定できます。
Harborのドキュメントには、レジストリプロジェクトでの役割に応じたユーザー権限が記載されているため、管理者は各メンバーが何を閲覧できるかを正確に把握できます。Harborは認証について複数の選択肢を提供しています。データベース認証はHarbor内で直接管理され、LDAP/Active Directory認証は外部のLDAPまたはADプロバイダーを通じて管理されます。また、OIDCプロバイダー認証は外部のOIDCプロバイダーによって管理されます。
主な差別化要因
- オープンソースの脆弱性スキャナーとの統合と詳細な脆弱性記録
- 署名検証ツールとの統合
- ユーザー認証の複数の選択肢
コンテナレジストリの比較
| 無料(ティアまたはソリューション) | GitHubまたはBitBucketとの統合 | OCIアーティファクトをサポート | |
|---|---|---|---|
| Azure Container Registry | X | ✅ | ✅ |
| Docker Hub | ✅ | ✅ | X |
| Red Hat Quay | X | ✅ | ✅ |
| Amazon ECR | ✅ | ✅ | ✅ |
| Harbor Container Registry | ✅ | ✅ | ✅ |
コンテナレジストリの機能
- パブリックレジストリとプライベートレジストリの両方を提供:一般に、企業はプライベートレジストリを選択すべきです。コンテナイメージのセキュリティを高められるためです。
- コンテナイメージの複数バージョンを保存:企業がイメージを以前の状態に戻したい場合、エンジニアはレジストリストレージからそのイメージをプルできます。
- 他の開発ツールと統合:リポジトリ内で開発者がコードを共同開発するGitHubやBitbucketは、その代表例です。
- レジストリユーザーを認証:コンテナ内のデータは保護する必要があるため、イメージへのユーザーアクセスを制限し、ユーザーの身元を確認します。
コンテナレジストリのメリット
開発の柔軟性を向上:レジストリを利用すると、開発者はコンテナの柔軟性というメリットを享受できます。イメージをレジストリからプルし、複数の環境で実行できるためです。コンテナはアプリケーションの依存関係をすべて1つの分離された場所にパッケージ化するため、複数のオペレーティングシステム上で実行できます。この柔軟性により、異なるオペレーティングシステムやプラットフォームを使用する企業やチームでも、重要なワークロードを実行できます。
開発ワークフローを効率化:GitHubなどの開発ツールとのレジストリ統合により、開発チームはコードを別のリポジトリで扱い、その後コンテナレジストリにプッシュできるようになります。他のソフトウェアとの統合により、開発者はコンテナイメージの作成や保存をより柔軟に行えます。
デプロイを高速化:開発者は、1コマンドでのデプロイやローカルプル通知などの機能により、コンテナアプリケーションのデプロイ期間を短縮できます。
コンテナレジストリのユースケース
「標準化されたアーキテクチャと仮想化された自動テスト環境により、VW Groupはシステムテストのコストを50%削減しました。また、新しいプラットフォームとアジャイルプロセスによって、チーム間およびパートナーとのコラボレーションも改善しました。同グループは、現在および将来のイノベーションを支援するため、Red Hatソフトウェア環境の強化と拡張を計画しています。Car.Software部門向けにエンドツーエンドの統合テストプロセスの構築を評価しており、コードのコミットから顧客の車両へのデプロイまでをわずか24時間で実現することを目指しています」―Volkswagen Group Electric Development部門の事例(Quayコンテナレジストリを含むRed Hatソリューションを利用)
「システムプラットフォームは、サービスおよび機能単位でアプリケーションをコンテナ化し、KubernetesマネージドサービスであるAzure Kubernetes Service(以下、AKS)上で管理します。eサービスの中核エンジンであるジオコーディングと地理空間情報検索も、コンテナアプリケーションとして実行されます」―UPWARDのシニアエンジニア、Koji Kagaya氏による、Azureサービスと、Azure Container RegistryおよびGitHubを使ったアプリケーションの自動デプロイを含む同社のインフラ更新支援に関する事例では、「作業負荷を軽減し、スケーラビリティを確保する」方法が紹介されています。
コンテナレジストリソフトウェアの選定ポイント
ビジネス要件に基づいて、コンテナレジストリのセキュリティ機能を検討します。ヘルスケアや金融サービスなどの業界に属し、重要なアプリケーションをコンテナで実行する企業は、追加のセキュリティ機能を使ってイメージを保存できるレジストリを選択してください。
構成可能で柔軟なアクセス制御をサポートするプロバイダーを選択してください。コンテナには重要なアプリケーションデータを保存できるため、アクセスできるユーザーを制限する必要があります。
開発チームがGitHubやBitbucketなどのツール内でコンテナイメージを設計・共有している場合は、いずれか、または両方と統合できるソリューションを選択してください。開発者は、コンテナ開発にすでに使用しているアプリケーションで作業を続けられます。
関連記事:コンテナ化市場