再利用するためのコンテナーを作成する
これらのコンテナー レシピを使用して、再利用できる Azure AI コンテナーを作成します。 コンテナーの起動時に必要に "ならない" ように、一部またはすべての構成設定を使用してコンテナーをビルドすることができます。
(設定を使用して) この新しいレイヤーのコンテナーを用意し、それをローカルでテストした後は、コンテナー レジストリにコンテナーを保存できます。 コンテナーが起動するときは、コンテナーに現在保存されていないそれらの設定のみが必要になります。 プライベート レジストリ コンテナーには、それらの設定を渡すための構成領域が用意されています。
Docker の実行構文
このドキュメント内の docker run
の例はすべて、^
行継続文字を使用する Windows コンソールを想定しています。 ご自分で使用する場合は、次の点を考慮してください。
- Docker コンテナーについて高度な知識がある場合を除き、引数の順序は変更しないでください。
- Windows 以外のオペレーティング システム、または Windows コンソール以外のコンソールを使用している場合は、お使いのコンソールおよびシステムに適したコンソール/ターミナル、マウント用のフォルダー構文、および行継続文字を使用します。 Azure AI サービス コンテナーは Linux オペレーティング システムであるため、ターゲット マウントでは Linux スタイルのフォルダー構文を使用します。
docker run
の例では、Windows 上のアクセス許可の競合を防ぐために、c:
ドライブのディレクトリを使用しています。 特定のディレクトリを入力ディレクトリとして使用する必要がある場合は、Docker サービスのアクセス許可の付与が必要なことがあります。
イメージに構成設定を保存しない
各サービスの例の docker run
コマンドでは、コンテナーに構成設定を保存しません。 コンソールまたはレジストリ サービスからコンテナーを起動するときに、これらの構成設定を渡す必要があります。 プライベート レジストリ コンテナーには、それらの設定を渡すための構成領域が用意されています。
レシピの再利用: すべての構成設定をコンテナーに保存する
すべての構成設定を保存するために、それらの設定を使用して Dockerfile
を作成します。
このアプローチの問題点:
- 新しいコンテナーには、元のコンテナーとは別の名前とタグがあります。
- これらの設定を変更するには、Dockerfile の値を変更し、イメージをリビルドし、レジストリに再発行する必要があります。
- 誰かがコンテナー レジストリまたはローカル ホストのアクセス権を取得すると、コンテナーを実行し、Azure AI サービス エンドポイントを使用することができます。
- 使用している Azure AI サービスで入力マウントが必要ない場合は、Dockerfile に
COPY
行を追加しないでください。
使用する既存の Azure AI サービス コンテナーからプルして Dockerfile を作成してから、Dockerfile で docker コマンドを使用して、コンテナーに必要な情報を設定または取得します。
この例では次のとおりです。
ENV
を使用して、課金エンドポイント (ホストの環境キーの{BILLING_ENDPOINT}
) を設定します。- ENV を使用して、課金 API キー (ホストの環境キーの
{ENDPOINT_KEY}
) を設定します。
レシピの再利用: 課金設定をコンテナーに保存する
この例では、Dockerfile から言語サービスのセンチメント コンテナーをビルドする方法を示します。
FROM mcr.microsoft.com/azure-cognitive-services/sentiment:latest
ENV billing={BILLING_ENDPOINT}
ENV apikey={ENDPOINT_KEY}
ENV EULA=accept
必要に応じて、ローカルで、またはプライベート レジストリ コンテナーからコンテナーをビルドして実行します。
レシピの再利用: 課金とマウントの設定をコンテナーに保存する
この例では、Language Understanding を使用して、Dockerfile の課金およびモデルを保存する方法を示します。
COPY
を使用して、ホストのファイル システムの Language Understanding (LUIS) モデル ファイルをコピーします。- LUIS コンテナーは複数のモデルをサポートしています。 すべてのモデルが同じフォルダーに格納されている場合は、常に 1 つの
COPY
ステートメントが必要です。 - モデル入力ディレクトリの相対的な親から docker ファイルを実行します。 次の例では、
/input
の相対的な親からdocker build
およびdocker run
コマンドを実行します。COPY
コマンドの最初の/input
は、ホスト コンピューターのディレクトリです。 2 つ目の/input
はコンテナーのディレクトリです。
FROM <container-registry>/<cognitive-service-container-name>:<tag>
ENV billing={BILLING_ENDPOINT}
ENV apikey={ENDPOINT_KEY}
ENV EULA=accept
COPY /input /input
必要に応じて、ローカルで、またはプライベート レジストリ コンテナーからコンテナーをビルドして実行します。
ローカル ホスト上でコンテナーを使用する方法
Docker ファイルをビルドするには、<your-image-name>
を新しいイメージ名に置き換えてから、次を使用します。
docker build -t <your-image-name> .
イメージを実行し、コンテナーが停止したときにそれを削除するには (--rm
):
docker run --rm <your-image-name>
プライベート レジストリにコンテナーを追加する方法
Dockerfile を使用して新しいイメージをプライベート コンテナーのレジストリに配置するには、次の手順を実行します。
再利用のレシピのテキストを使用して
Dockerfile
を作成します。Dockerfile
には拡張子がありません。山かっこ内のすべての値をご自分の値に置き換えます。
次のコマンドを使用して、コマンド ラインまたはターミナルでファイルをイメージにビルドします。 山かっこ
<>
内の値は、ご自分のコンテナー名とタグに置き換えます。タグ オプション
-t
は、コンテナーの変更内容に関する情報を追加する方法の 1 つです。 たとえば、コンテナー名modified-LUIS
は、元のコンテナーが階層化されていることを示します。 タグ名with-billing-and-model
は、Language Understanding (LUIS) コンテナーがどのように変更されたかを示します。docker build -t <your-new-container-name>:<your-new-tag-name> .
コンソールから Azure CLI にサインインします。 このコマンドでブラウザーが開かれ、認証が要求されます。 認証されると、ブラウザーを閉じてコンソールで作業を続行することができます。
az login
コンソールから Azure CLI を使用してプライベート レジストリにサインインします。
山かっこ
<my-registry>
内の値をご自分のレジストリ名に置き換えます。az acr login --name <my-registry>
ご自分にサービス プリンシパルが割り当てられている場合は、docker login を使用してサインインすることもできます。
docker login <my-registry>.azurecr.io
コンテナーにプライベート レジストリの場所のタグを付けます。 山かっこ
<my-registry>
内の値をご自分のレジストリ名に置き換えます。docker tag <your-new-container-name>:<your-new-tag-name> <my-registry>.azurecr.io/<your-new-container-name-in-registry>:<your-new-tag-name>
タグ名を使用しない場合は、
latest
が暗黙的に使用されます。新しいイメージをプライベート コンテナー レジストリにプッシュします。 プライベート コンテナー レジストリを表示すると、次の CLI コマンドで使用されるコンテナー名がリポジトリの名前になります。
docker push <my-registry>.azurecr.io/<your-new-container-name-in-registry>:<your-new-tag-name>