次の方法で共有


Azure Container Registry を使用してパブリック コンテンツを管理する

この記事では、Azure コンテナー レジストリなどのローカル レジストリを使用して、Docker Hub のコンテナー イメージなどのパブリック コンテンツのコピーを管理するための手法とワークフローの概要について説明します。

パブリック コンテンツに関するリスク

お使いの環境が、パブリック コンテナー イメージ、Helm チャートOpen Policy Agent (OPA) ポリシー、その他の成果物などのパブリック コンテンツに依存している場合があります。 たとえば、Docker Hub や別のパブリック レジストリから直接イメージをプルして、サービスのルーティングや docker build FROM alpine のために nginx を実行する場合があります。

適切な制御なしでパブリック レジストリ コンテンツに依存すると、イメージの開発とデプロイのワークフローにリスクが生じる可能性があります。 リスクを軽減するには、できるだけパブリック コンテンツのローカル コピーを保持するようにします。 詳細については、Open Container Initiative のブログを参照してください。

Docker Hub を使用して認証する

最初の手順として、現在、ビルドまたはデプロイのワークフローの一環として Docker Hub からパブリック イメージをプルしている場合、匿名のプル要求を行うのではなく、Docker Hub アカウントを使用して認証することをお勧めします。

匿名のプル要求を頻繁に行うと、ERROR: toomanyrequests: Too Many Requests.You have reached your pull rate limit. のような Docker エラーが発生することがあります。このようなエラーを防ぐには、Docker Hub に対して認証を行います。

Note

2020 年 11 月 2 日より、Docker の無料プラン アカウントから Docker Hub に対する匿名と認証済みの要求にダウンロード レート制限が適用されるようになり、それぞれ IP アドレスと Docker ID によって実施されます。

プル要求の数を見積もる場合、クラウド プロバイダーのサービスを使用する際や企業の NAT の内側で作業する際は、複数のユーザーが IP アドレスのサブセットとして集約的に Docker Hub に示されることを考慮してください。 Docker の有料アカウント認証を Docker Hub に対して行われる要求に追加すると、レート制限の調整によってサービスが中断する可能性がなくなります。

詳細については、Docker の価格とサブスクリプションに関するページおよび「Docker のサービス使用条件」を参照してください。

Docker Hub のアクセス トークン

Docker Hub では、Docker Hub に対する認証時に Docker パスワードの代替手段として個人用アクセス トークンがサポートされます。 Docker Hub からイメージをプルする自動化されたサービスには、トークンをお勧めします。 異なるユーザーまたはサービス用に複数のトークンを生成でき、不要になったときはトークンを取り消すことができます。

トークンを使用して docker login によって認証するには、コマンド ラインでパスワードを省略します。 パスワードの入力を求められたら、代わりにトークンを入力します。 Docker Hub アカウントで 2 要素認証を有効にした場合は、Docker CLI からログインするときに個人用アクセス トークンを使用する必要があります。

Azure サービスから認証する

App Service や Azure Container Instances を含むいくつかの Azure サービスでは、コンテナーをデプロイするために Docker Hub などのパブリック レジストリからイメージをプルすることがサポートされています。 Docker Hub からのイメージをデプロイする必要がある場合は、Docker Hub アカウントを使用して認証を行うように設定を構成することをお勧めします。 次に例を示します。

App Service

  • イメージのソース:Docker Hub
  • リポジトリ アクセス:プライベート
  • ログイン: <Docker Hub のユーザー名>
  • パスワード: <Docker Hub のトークン>

詳細については、「App Service での Docker Hub の認証されたプル」を参照してください。

Azure Container Instances

  • イメージのソース:Docker Hub またはその他のレジストリ
  • イメージの種類:プライベート
  • イメージ レジストリのログイン サーバー: docker.io
  • イメージ レジストリのユーザー名: <Docker Hub のユーザー名>
  • イメージ レジストリのパスワード: <Docker Hub のトークン>
  • イメージ: docker.io/<リポジトリ名>:<タグ>

パブリック コンテンツを使用するようにアーティファクト キャッシュを構成する

パブリック コンテンツの使用に関するベスト プラクティスは、レジストリ認証とアーティファクト キャッシュ機能を組み合わせることです。 プライベート ネットワークであっても、アーティファクト キャッシュを使ってコンテナー成果物を Azure Container Registry にキャッシュできます。 アーティファクト キャッシュを使うと、レジストリのレート制限から保護されるだけでなく、geo レプリケートされた ACR と組み合わせて Azure リソースに最も近いリージョンから成果物をプルするときに、プルの信頼性が大幅に向上します。 さらに、プライベート ネットワーク、ファイアウォール構成、サービス プリンシパルなど、ACR が提供するすべてのセキュリティ機能を使うこともできます。 ACR アーティファクト キャッシュでのパブリック コンテンツの使用について詳しくは、アーティファクト キャッシュのチュートリアルをご覧ください。

Azure コンテナー レジストリへのイメージのインポート

パブリック イメージのコピーの管理を始めるために、Azure コンテナー レジストリを作成できます (まだない場合)。 レジストリの作成には、Azure CLIAzure portalAzure PowerShell、またはその他のツールを使用します。

推奨されている 1 回限りの手順として、基本イメージとその他のパブリック コンテンツを Azure コンテナー レジストリにインポートしてください。 Azure CLI の az acr import コマンドは、Docker Hub や Microsoft Container Registry などのパブリック レジストリから、および他のプライベート コンテナー レジストリからのイメージのインポートに対応しています。

az acr import では、Docker のローカル インストールは不要です。 Azure CLI のローカル インストールを使用するか、Azure Cloud Shell 内で直接実行できます。 任意の種類の OS のイメージ、マルチアーキテクチャ イメージ、または Helm チャートなどの OCI 成果物がサポートされます。

組織のニーズに応じて、専用レジストリか、または共有レジストリ内のリポジトリにインポートできます。

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest \
  --username <Docker Hub username> \
  --password <Docker Hub token>

画像参照の更新

アプリケーション イメージの開発者は、そのコードが、自分の制御下にあるローカル コンテンツを参照していることを確認する必要があります。

  • プライベート レジストリを使用するように画像参照を更新します。 たとえば、Dockerfile の FROM baseimage:v1 ステートメントを FROM myregistry.azurecr.io/mybaseimage:v1 に更新します。
  • プライベート レジストリを使用するように資格情報または認証メカニズムを構成します。 正しいメカニズムは、レジストリのアクセスに使用するツールと、ユーザー アクセスの管理方法によって変わります。
    • Kubernetes クラスターまたは Azure Kubernetes Service を使用してレジストリにアクセスする場合、認証シナリオを参照してください。
    • Azure コンテナー レジストリで認証するためのオプションについては、こちらをご覧ください。

アプリケーション イメージの更新を自動化する

イメージのインポートを拡張して、基本イメージの更新時にアプリケーション イメージのビルドが自動的に行われるように Azure Container Registry タスクを設定します。 自動化されたビルド タスクでは、基本イメージの更新ソース コードの更新の両方を追跡できます。

詳しい例については、「Azure Container Registry タスクを使用してパブリック コンテンツを使用および保守する方法」を参照してください。

Note

タスクを 1 つ事前に構成しておくと、依存側の基本イメージを参照するすべてのアプリケーション イメージを自動的にリビルドできます。

次のステップ