チュートリアル:Azure Container Registry タスクを使用して、クラウドでコンテナー イメージをビルドしてデプロイするTutorial: Build and deploy container images in the cloud with Azure Container Registry Tasks

ACR Task は、Azure Container Registry 内の機能スイートで、Azure での合理的かつ効率的な Docker コンテナー イメージ ビルドを実現します。ACR Tasks is a suite of features within Azure Container Registry that provides streamlined and efficient Docker container image builds in Azure. この記事では、ACR Task のクイック タスク機能を使用する方法を説明します。In this article, you learn how to use the quick task feature of ACR Tasks.

「内部ループ」開発サイクルは、コードの記述、ビルド、およびソース管理にコミットする前のアプリケーションのテストの反復的なプロセスです。The "inner-loop" development cycle is the iterative process of writing code, building, and testing your application before committing to source control. クイック タスクは「内部ループ」をクラウドに拡張し、ビルド成功の検証と、正常にビルドされたイメージのコンテナー レジストリへの自動プッシュを提供します。A quick task extends your inner-loop to the cloud, providing you with build success validation and automatic pushing of successfully built images to your container registry. イメージは、お使いのレジストリの近くのクラウドにネイティブにビルドされるため、デプロイが高速化されます。Your images are built natively in the cloud, close to your registry, enabling faster deployment.

Dockerfile に関する専門知識をすべて、ACR Task に直接転送できます。All your Dockerfile expertise is directly transferrable to ACR Tasks. ACR Task を使用してクラウドにビルドするために Dockerfile を変更する必要はありません。必要なのはコマンドの実行だけです。You don't have to change your Dockerfiles to build in the cloud with ACR Tasks, just the command you run.

このチュートリアルでは、シリーズの第 1 部で次のことを行います。In this tutorial, part one of a series:

  • サンプル アプリケーションのソース コードを取得するGet the sample application source code
  • Azure でコンテナー イメージをビルドするBuild a container image in Azure
  • コンテナーを Azure Container Instances にデプロイするDeploy a container to Azure Container Instances

以降のチュートリアルでは、コードのコミット時と基本イメージ更新時に自動化されたコンテナー イメージ ビルド用に ACR Task を使用する方法を説明します。In subsequent tutorials, you learn to use ACR Tasks for automated container image builds on code commit and base image update. ACR タスクでは、複数ステップ タスクを実行することもできます。その場合、YAML ファイルを使用して、複数のコンテナーをビルド、プッシュ、および (必要に応じて) テストする手順を定義します。ACR Tasks can also run multi-step tasks, using a YAML file to define steps to build, push, and optionally test multiple containers.

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell では、bashPowerShell のいずれかを使用して Azure サービスを操作できます。Cloud Shell lets you use either bash or PowerShell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を起動するには:To launch Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [使ってみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. 新しいウィンドウで Cloud Shell を起動するLaunch Cloud Shell in a new window
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を起動します。Launch Cloud Shell.

  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.

  3. Windows と Linux では Ctrl + Shift + V キー、macOS では Cmd + Shift + V キーを使用して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.

  4. Enter キーを押して、コードを実行します。Press Enter to run the code.

Azure CLI をローカルで使用する場合は、Azure CLI のバージョン 2.0.46 以降がインストールされていて、az login を使用してログインしている必要があります。If you'd like to use the Azure CLI locally, you must have Azure CLI version 2.0.46 or later installed and logged in with az login. バージョンを確認するには、az --version を実行します。Run az --version to find the version. CLI をインストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade the CLI, see Install Azure CLI.

前提条件Prerequisites

GitHub アカウントGitHub account

まだお持ちでない場合は、 https://github.com でアカウントを作成します。Create an account on https://github.com if you don't already have one. このチュートリアル シリーズでは、GitHub リポジトリを使用して ACR Task での自動化されたイメージ ビルドを示します。This tutorial series uses a GitHub repository to demonstrate automated image builds in ACR Tasks.

サンプル リポジトリのフォークFork sample repository

次に、GitHub UI を使用して、サンプル リポジトリを GitHub アカウントにフォークします。Next, use the GitHub UI to fork the sample repository into your GitHub account. このチュートリアルでは、ソースからのコンテナー イメージをリポジトリにビルドし、次のチュートリアルでは、リポジトリのフォークにコミットをプッシュして自動化されたタスクを開始します。In this tutorial, you build a container image from the source in the repo, and in the next tutorial, you push a commit to your fork of the repo to kick off an automated task.

以下でリポジトリをフォーク: https://github.com/Azure-Samples/acr-build-helloworld-nodeFork this repository: https://github.com/Azure-Samples/acr-build-helloworld-node

GitHub の [フォーク] ボタン (マーク済み) のスクリーンショット

フォークの複製Clone your fork

リポジトリをフォークしたら、フォークを複製して、ローカル クローンを含むディレクトリを入力します。Once you've forked the repo, clone your fork and enter the directory containing your local clone.

git を使用してリポジトリを複製し、 <your-github-username> を GitHub のユーザー名に置き換えます。Clone the repo with git, replace <your-github-username> with your GitHub username:

git clone https://github.com/<your-github-username>/acr-build-helloworld-node

ソース コードを含むディレクトリを入力します。Enter the directory containing the source code:

cd acr-build-helloworld-node

Bash シェルBash shell

このチュートリアルの一連のコマンドは、Bash シェル用にフォーマットされています。The commands in this tutorial series are formatted for the Bash shell. PowerShell、コマンド プロンプト、または他のシェルを使用したい場合は、必要に応じて行継続と環境変数の調整が必要になる場合があります。If you prefer to use PowerShell, Command Prompt, or another shell, you may need to adjust the line continuation and environment variable format accordingly.

ACR Task を使用した Azure でのビルドBuild in Azure with ACR Tasks

これで、コンピューターにソース コードを取得したので、次の手順に従ってコンテナー レジストリを作成して、ACR Task を使用してコンテナー イメージをビルドします。Now that you've pulled the source code down to your machine, follow these steps to create a container registry and build the container image with ACR Tasks.

サンプル コマンドの実行を簡単にするために、このシリーズのチュートリアルではシェル環境変数を使用します。To make executing the sample commands easier, the tutorials in this series use shell environment variables. 次のコマンドを実行して、ACR_NAME 変数を設定します。Execute the following command to set the ACR_NAME variable. <registry-name> を新しいコンテナー レジストリの一意の名前に置き換えます。Replace <registry-name> with a unique name for your new container registry. レジストリ名は、Azure 内で一意にする必要があり、小文字のみで 5 - 50 文字の英数字を含める必要があります。The registry name must be unique within Azure, contain only lower case letters, and contain 5-50 alphanumeric characters. このチュートリアルで作成する他のリソースはこの名前に基づくため、この最初の変数のみ変更する必要があります。The other resources you create in the tutorial are based on this name, so you should need to modify only this first variable.

ACR_NAME=<registry-name>

コンテナー レジストリ環境変数は入力済みなので、チュートリアルの残りのコマンドをコピーして貼り付けられるようになりました。値を編集する必要はありません。With the container registry environment variable populated, you should now be able to copy and paste the remainder of the commands in the tutorial without editing any values. 次のコマンドを実行して、リソース グループとコンテナー レジストリを作成します。Execute the following commands to create a resource group and container registry:

RES_GROUP=$ACR_NAME # Resource Group name

az group create --resource-group $RES_GROUP --location eastus
az acr create --resource-group $RES_GROUP --name $ACR_NAME --sku Standard --location eastus

レジストリができたので、ACR Task を使用して、サンプル コードからコンテナー イメージをビルドします。Now that you have a registry, use ACR Tasks to build a container image from the sample code. az acr build コマンドを実行して、クイック タスクを実行します。Execute the az acr build command to perform a quick task:

az acr build --registry $ACR_NAME --image helloacrtasks:v1 .

az acr build コマンドの出力は、次のようになります。Output from the az acr build command is similar to the following. ソース コード ("コンテキスト") の Azure へのアップロードと、クラウドで ACR Task によって実行された docker build 操作の詳細を表示できます。You can see the upload of the source code (the "context") to Azure, and the details of the docker build operation that the ACR task runs in the cloud. ACR Task は docker build を使用してイメージをビルドするため、Dockerfile を変更することなく ACR Task の使用をすぐに開始できます。Because ACR tasks use docker build to build your images, no changes to your Dockerfiles are required to start using ACR Tasks immediately.

$ az acr build --registry $ACR_NAME --image helloacrtasks:v1 .
Packing source code into tar file to upload...
Sending build context (4.813 KiB) to ACR...
Queued a build with build ID: da1
Waiting for build agent...
2018/08/22 18:31:42 Using acb_vol_01185991-be5f-42f0-9403-a36bb997ff35 as the home volume
2018/08/22 18:31:42 Setting up Docker configuration...
2018/08/22 18:31:43 Successfully set up Docker configuration
2018/08/22 18:31:43 Logging in to registry: myregistry.azurecr.io
2018/08/22 18:31:55 Successfully logged in
Sending build context to Docker daemon   21.5kB
Step 1/5 : FROM node:9-alpine
9-alpine: Pulling from library/node
Digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
Status: Image is up to date for node:9-alpine
 ---> a56170f59699
Step 2/5 : COPY . /src
 ---> 88087d7e709a
Step 3/5 : RUN cd /src && npm install
 ---> Running in e80e1263ce9a
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN helloworld@1.0.0 No repository field.

up to date in 0.1s
Removing intermediate container e80e1263ce9a
 ---> 26aac291c02e
Step 4/5 : EXPOSE 80
 ---> Running in 318fb4c124ac
Removing intermediate container 318fb4c124ac
 ---> 113e157d0d5a
Step 5/5 : CMD ["node", "/src/server.js"]
 ---> Running in fe7027a11787
Removing intermediate container fe7027a11787
 ---> 20a27b90eb29
Successfully built 20a27b90eb29
Successfully tagged myregistry.azurecr.io/helloacrtasks:v1
2018/08/22 18:32:11 Pushing image: myregistry.azurecr.io/helloacrtasks:v1, attempt 1
The push refers to repository [myregistry.azurecr.io/helloacrtasks]
6428a18b7034: Preparing
c44b9827df52: Preparing
172ed8ca5e43: Preparing
8c9992f4e5dd: Preparing
8dfad2055603: Preparing
c44b9827df52: Pushed
172ed8ca5e43: Pushed
8dfad2055603: Pushed
6428a18b7034: Pushed
8c9992f4e5dd: Pushed
v1: digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1 size: 1366
2018/08/22 18:32:43 Successfully pushed image: myregistry.azurecr.io/helloacrtasks:v1
2018/08/22 18:32:43 Step ID acb_step_0 marked as successful (elapsed time in seconds: 15.648945)
The following dependencies were found:
- image:
    registry: myregistry.azurecr.io
    repository: helloacrtasks
    tag: v1
    digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 9-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git: {}

Run ID: da1 was successful after 1m9.970148252s

出力の最後のほうに、ACR Task によって、イメージの検出された依存関係が表示されます。Near the end of the output, ACR Tasks displays the dependencies it's discovered for your image. これにより、ACR Task は基本イメージの更新時 (OS またはフレームワークの修正プログラムによる基本イメージの更新時) にイメージ ビルドを自動化できます。This enables ACR Tasks to automate image builds on base image updates, such as when a base image is updated with OS or framework patches. 基本イメージの更新プログラムの ACR Task のサポートについては、このチュートリアル シリーズで後ほど説明します。You learn about ACR Tasks support for base image updates later in this tutorial series.

Azure Container Instances へのデプロイDeploy to Azure Container Instances

ACR Task によって、既定でビルド イメージがレジストリに自動的に正常にプッシュされるため、レジストリからすぐにイメージをデプロイできます。ACR tasks automatically push successfully built images to your registry by default, allowing you to deploy them from your registry immediately.

このセクションでは、Azure Key Vault とサービス プリンシパルを作成し、サービス プリンシパルの資格情報を使用して Azure Container Instances (ACI) にコンテナーをデプロイします。In this section, you create an Azure Key Vault and service principal, then deploy the container to Azure Container Instances (ACI) using the service principal's credentials.

レジストリの認証を構成するConfigure registry authentication

すべての運用環境のシナリオでは、サービス プリンシパルを使用して、Azure コンテナー レジストリにアクセスする必要があります。All production scenarios should use service principals to access an Azure container registry. サービス プリンシパルを使用すると、コンテナー イメージへのロールベースのアクセス制御を提供できます。Service principals allow you to provide role-based access control to your container images. たとえば、レジストリに対するプルのみのアクセス権を持つサービス プリンシパルを設定できます。For example, you can configure a service principal with pull-only access to a registry.

Key Vault を作成しますCreate a key vault

Azure キー コンテナーにコンテナーがない場合、次のコマンドを使用して Azure CLI で 1 つ作成します。If you don't already have a vault in Azure Key Vault, create one with the Azure CLI using the following commands.

AKV_NAME=$ACR_NAME-vault

az keyvault create --resource-group $RES_GROUP --name $AKV_NAME

サービス プリンシパルを作成し、資格情報を格納するCreate a service principal and store credentials

今度は、サービス プリンシパルを作成し、その資格情報をキー コンテナーに格納する必要があります。You now need to create a service principal and store its credentials in your key vault.

az ad sp create-for-rbac コマンドを使用してサービス プリンシパルを作成し、az keyvault secret set を使用して資格情報コンテナーにサービス プリンシパルのパスワードを格納します。Use the az ad sp create-for-rbac command to create the service principal, and az keyvault secret set to store the service principal's password in the vault:

# Create service principal, store its password in AKV (the registry *password*)
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp create-for-rbac \
                --name $ACR_NAME-pull \
                --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
                --role acrpull \
                --query password \
                --output tsv)

上記のコマンドの --role 引数により、acrpull ロールを持つサービス プリンシパルが構成されます。これにより、レジストリに対するプルのみのアクセス権が付与されます。The --role argument in the preceding command configures the service principal with the acrpull role, which grants it pull-only access to the registry. プッシュ アクセス権とプル アクセス権の両方を付与するには、--role 引数を acrpush に変更します。To grant both push and pull access, change the --role argument to acrpush.

次にサービス プリンシパルの appId を資格情報コンテナーに格納します。appId は、認証のために Azure Container Registry に渡すユーザー名です。Next, store the service principal's appId in the vault, which is the username you pass to Azure Container Registry for authentication:

# Store service principal ID in AKV (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp show --id http://$ACR_NAME-pull --query appId --output tsv)

Azure キー コンテナーを作成してに 2 つのシークレットを格納します。You've created an Azure Key Vault and stored two secrets in it:

  • $ACR_NAME-pull-usr:サービス プリンシパル ID。コンテナー レジストリのユーザー名として使用します。$ACR_NAME-pull-usr: The service principal ID, for use as the container registry username.
  • $ACR_NAME-pull-pwd:サービス プリンシパルのパスワード。コンテナー レジストリのパスワードとして使用します。$ACR_NAME-pull-pwd: The service principal password, for use as the container registry password.

これらのシークレットは、アプリケーションおよびサービスがレジストリからイメージをプルしたときの名前で参照できます。You can now reference these secrets by name when you or your applications and services pull images from the registry.

Azure CLI でコンテナーをデプロイするDeploy a container with Azure CLI

これでサービス プリンシパルの資格情報が Azure Key Vault シークレットに格納されたので、格納した資格情報をアプリケーションとサービスで使用してプライベート レジストリにアクセスできます。Now that the service principal credentials are stored as Azure Key Vault secrets, your applications and services can use them to access your private registry.

次の az container create コマンドを実行して、コンテナー インスタンスをデプロイします。Execute the following az container create command to deploy a container instance. このコマンドは、Azure Key Vault に格納されたサービス プリンシパルの資格情報を使用して、コンテナー レジストリに対する認証を行います。The command uses the service principal's credentials stored in Azure Key Vault to authenticate to your container registry.

az container create \
    --resource-group $RES_GROUP \
    --name acr-tasks \
    --image $ACR_NAME.azurecr.io/helloacrtasks:v1 \
    --registry-login-server $ACR_NAME.azurecr.io \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label acr-tasks-$ACR_NAME \
    --query "{FQDN:ipAddress.fqdn}" \
    --output table

前のコマンドが、コンテナーの DNS 名のラベルにコンテナーのレジストリの名前を追加するため、--dns-name-label の値は Azure 内で一意でなければなりません。The --dns-name-label value must be unique within Azure, so the preceding command appends your container registry's name to the container's DNS name label. コマンドの出力には、次のようにコンテナーの完全修飾ドメイン名 (FQDN) が表示されます。The output from the command displays the container's fully qualified domain name (FQDN), for example:

$ az container create \
>     --resource-group $RES_GROUP \
>     --name acr-tasks \
>     --image $ACR_NAME.azurecr.io/helloacrtasks:v1 \
>     --registry-login-server $ACR_NAME.azurecr.io \
>     --registry-username $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --query value -o tsv) \
>     --registry-password $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --query value -o tsv) \
>     --dns-name-label acr-tasks-$ACR_NAME \
>     --query "{FQDN:ipAddress.fqdn}" \
>     --output table
FQDN
----------------------------------------------
acr-tasks-myregistry.eastus.azurecontainer.io

コンテナーの FQDN を書き留めます。これは次のセクションで使用します。Take note of the container's FQDN, you'll use it in the next section.

デプロイを検証するVerify the deployment

コンテナーの起動プロセスを監視するには、az container attach コマンドを使用します。To watch the startup process of the container, use the az container attach command:

az container attach --resource-group $RES_GROUP --name acr-tasks

az container attach 出力では、イメージを取得して開始するときに最初にコンテナーの状態が表示され、次にローカル コンソールの STDOUT と STDERR がコンテナーにバインドされます。The az container attach output first displays the container's status as it pulls the image and starts, then binds your local console's STDOUT and STDERR to that of the container's.

$ az container attach --resource-group $RES_GROUP --name acr-tasks
Container 'acr-tasks' is in state 'Running'...
(count: 1) (last timestamp: 2018-08-22 18:39:10+00:00) pulling image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2018-08-22 18:39:15+00:00) Successfully pulled image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2018-08-22 18:39:17+00:00) Created container
(count: 1) (last timestamp: 2018-08-22 18:39:17+00:00) Started container

Start streaming logs:
Server running at http://localhost:80

Server running at http://localhost:80 が表示されたら、ブラウザーでコンテナーの FQDN に移動して、実行中のアプリケーションを表示します。When Server running at http://localhost:80 appears, navigate to the container's FQDN in your browser to see the running application. az container create前のセクションで実行されたコマンドの出力に FQDN が表示されている必要があります。The FQDN should have been displayed in the output of the az container create command you executed in the previous section.

ブラウザーに表示されたサンプル アプリケーションのスクリーンショット

コンテナーからコンソールをデタッチするには、Control+C を押します。To detach your console from the container, hit Control+C.

リソースのクリーンアップClean up resources

az container delete コマンドを使用してコンテナー インスタンスを停止します。Stop the container instance with the az container delete command:

az container delete --resource-group $RES_GROUP --name acr-tasks

このチュートリアルで作成した "すべての" リソース (コンテナー レジストリ、キー コンテナー、サービス プリンシパルなど) を削除するには、次のコマンドを実行します。To remove all resources you've created in this tutorial, including the container registry, key vault, and service principal, issue the following commands. ただし、これらのリソースはシリーズの次のチュートリアルで使用するため、次のチュートリアルに進んでいる場合は削除しないことをお勧めします。These resources are used in the next tutorial in the series, however, so you might want to keep them if you move on directly to the next tutorial.

az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull

次の手順Next steps

これで、クイックタスクで内部ループをテストしたので、ソース コードを Git リポジトリにコミットしたときにコンテナー イメージ ビルドをトリガーするようにビルド タスクを構成します。Now that you've tested your inner loop with a quick task, configure a build task to trigger container images builds when you commit source code to a Git repository: