Web App for Containers のカスタム Docker イメージを使用するUse a custom Docker image for Web App for Containers

Web App for Containers は、PHP 7.0 や Node.js 4.5 などの特定のバージョンをサポートする組み込みの Docker イメージを Linux 上で提供します。Web App for Containers provides built-in Docker images on Linux with support for specific versions, such as PHP 7.0 and Node.js 4.5. Web App for Containers では、Docker コンテナー テクノロジを使用して、組み込みイメージとカスタム イメージの両方をサービスとしてのプラットフォームとしてホストします。Web App for Containers uses the Docker container technology to host both built-in images and custom images as a platform as a service. このチュートリアルでは、カスタム Docker イメージを作成し、Web App for Containers にデプロイする方法について説明します。In this tutorial, you learn how to build a custom Docker image and deploy it to Web App for Containers. このパターンは、組み込みイメージに選択した言語が含まれない場合や、アプリケーションで組み込みイメージで提供されない特定の構成が必要となる場合に便利です。This pattern is useful when the built-in images don't include your language of choice, or when your application requires a specific configuration that isn't provided within the built-in images.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • カスタム Docker イメージを Azure にデプロイするDeploy a custom Docker image to Azure
  • コンテナーを実行するための環境変数を構成するConfigure environment variables to run the container
  • Docker イメージを更新して再デプロイするUpdate the Docker image and redeploy it
  • SSH を使用してコンテナーに接続するConnect to the container using SSH
  • プライベート Docker イメージを Azure にデプロイするDeploy a private Docker image to Azure

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

このチュートリアルを完了するには、次のものが必要です。To complete this tutorial, you need:

サンプルのダウンロードDownload the sample

ターミナル ウィンドウで、次のコマンドを実行して、サンプル アプリのリポジトリをローカル コンピューターに複製し、サンプル コードを含むディレクトリに移動します。In a terminal window, run the following command to clone the sample app repository to your local machine, then change to the directory that contains the sample code.

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
cd docker-django-webapp-linux

Docker ファイルからイメージを作成するBuild the image from the Docker file

Git リポジトリで、Dockerfile を確認してください。In the Git repository, take a look at Dockerfile. このファイルには、アプリケーションの実行に必要な Python 環境が記述されています。This file describes the Python environment that is required to run your application. さらに、イメージはコンテナーとホスト間のセキュアな通信用に SSH サーバーを設定します。Additionally, the image sets up an SSH server for secure communication between the container and the host.

FROM python:3.4

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]

Docker イメージを作成するには、docker build コマンドを実行し、mydockerimage という名前を付け、タグ v1.0.0 を付けます。To build the Docker image, run the docker build command, and provide a name, mydockerimage, and tag, v1.0.0. <docker-id> を Docker Hub アカウント ID で置換します。Replace <docker-id> with your Docker Hub account ID.

docker build --tag <docker-id>/mydockerimage:v1.0.0 .

コマンドによって次のような出力が生成されます。The command produces output similar to the following:

# The output from the commands in this article has been shortened for brevity.

Sending build context to Docker daemon  5.558MB
Step 1/13 : FROM python:3.4
 ---> 9ff45ddb54e9
Step 2/13 : RUN mkdir /code
 ---> Using cache
 ---> f3f3ac01db0a
Step 3/13 : WORKDIR /code
 ---> Using cache
 ---> 38b32f15b442
.
.
.
Step 13/13 : ENTRYPOINT init.sh
 ---> Running in 5904e4c70043
 ---> e7cf08275692
Removing intermediate container 5904e4c70043
Successfully built e7cf08275692
Successfully tagged cephalin/mydockerimage:v1.0.0

Docker コンテナーを実行して、ビルドの動作をテストします。Test that the build works by running the Docker container. docker run コマンドを発行し、イメージの名前とタグを渡します。Issue the docker run command and pass the name and tag of the image to it. 必ず -p 引数を使用してポートを指定してください。Be sure to specify the port using the -p argument.

docker run -p 2222:8000 <docker-ID>/mydockerimage:v1.0.0

http://localhost:2222 を参照して、Web アプリとコンテナーが正しく機能していることを確認します。Verify the web app and container are functioning correctly by browsing to http://localhost:2222.

ローカルでの Web アプリのテスト

注意

SSH、SFTP、または Visual Studio Code (ライブ デバッグ Node.js アプリ用) を使用して、ローカル開発用コンピューターから直接アプリ コンテナーに接続することもできます。You can also connect to the app container directly from your local development machine using SSH, SFTP, or Visual Studio Code (for live debugging Node.js apps). 詳細については、Linux での App Service のリモート デバッグと SSH に関するページをご覧ください。For more information, see Remote debugging and SSH in App Service on Linux.

Docker イメージを Docker Hub にプッシュするPush the Docker image to Docker Hub

レジストリは、イメージをホストし、サービス イメージとコンテナー サービスを提供するアプリケーションです。A registry is an application that hosts images and provides services image and container services. イメージを共有するには、レジストリにプッシュする必要があります。In order to share your image, you must push it to a registry.

注意

プライベート Docker レジストリにプッシュする場合は、Pushing to a Private Docker Registry? プライベート レジストリから Docker イメージを使用する」の省略可能な手順をご覧ください。See the optional instructions to Use a Docker image from any private registry.

Docker Hub は Docker イメージのレジストリであり、パブリックまたはプライベートの独自のリポジトリをホストすることができます。Docker Hub is a registry for Docker images that allows you to host your own repositories, either public or private. カスタム Docker イメージをパブリック Docker Hub にプッシュするには、docker push コマンドを使用し、完全なイメージ名とタグを指定します。To push a custom Docker image to the public Docker Hub, use the docker push command and provide a full image name and tag. 完全なイメージ名とタグは、次の例のようになります。A full image name and tag looks like the following sample:

<docker-id>/image-name:tag

イメージをプッシュする前に、docker login コマンドを使用して Docker Hub にサインインする必要があります。Before you can push an image, you must sign in to Docker Hub using the docker login command. <docker-id> をアカウント名に置き換え、プロンプトで、コンソールにパスワードを入力します。Replace <docker-id> with your account name and type in your password into the console at the prompt.

docker login --username <docker-id>

「ログインに成功しました」のメッセージで、ログインしていることを確認します。A "login succeeded" message confirms that you are logged in. ログインしたら、docker push コマンドを使用して Docker Hub にイメージをプッシュできます。Once logged in, you can push the image to Docker Hub using the docker push command.

docker push <docker-id>/mydockerimage:v1.0.0

コマンドの出力を調べて、プッシュが成功したことを確認します。Verify that the push succeeded by examining the command's output.

The push refers to a repository [docker.io/<docker-id>/mydockerimage:v1.0.0]
c33197c3f6d4: Pushed
ccd2c850ee43: Pushed
02dff2853466: Pushed
6ce78153632a: Pushed
efef3f03cc58: Pushed
3439624d77fb: Pushed
3a07adfb35c5: Pushed
2fcec228e1b7: Mounted from library/python
97d2d3bae505: Mounted from library/python
95aadeabf504: Mounted from library/python
b456afdc9996: Mounted from library/python
d752a0310ee4: Mounted from library/python
db64edce4b5b: Mounted from library/python
d5d60fc34309: Mounted from library/python
c01c63c6823d: Mounted from library/python
v1.0.0: digest: sha256:21f2798b20555f4143f2ca0591a43b4f6c8138406041f2d32ec908974feced66 size: 3676

Azure Cloud Shell を開くOpen Azure Cloud Shell

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。Azure Cloud Shell is a free, interactive shell that you can use to run the steps in this article. Cloud Shell には一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。Common Azure tools are preinstalled and configured in Cloud Shell for you to use with your account. [コピー] ボタンを選択してコードをコピーし、Cloud Shell に貼り付けて Enter キーを押すだけで、コードを実行することができます。Just select the Copy button to copy the code, paste it in Cloud Shell, and then press Enter to run it. Cloud Shell は、次のようにいくつかの方法で開くことができます。There are a few ways to open Cloud Shell:

コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. この記事の Cloud Shell
ブラウザーで Cloud Shell を開きます。Open Cloud Shell in your browser. https://shell.azure.com/bash
Azure Portal の右上隅にあるメニューの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. ポータルの Cloud Shell

アプリを Azure にデプロイするDeploy app to Azure

先ほどプッシュしたイメージを使用するアプリを作成するには、グループ、続いてサービス プラン、最後に Web アプリ自体を作成する Azure CLI コマンドを実行します。To create a an app that uses the image you just pushed, you run Azure CLI commands that create a group, then a service plan, and finally the web app itself.

リソース グループの作成Create a resource group

リソース グループとは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. たとえば、後から簡単な手順で一度にリソース グループ全体を削除することもできます。For example, you can choose to delete the entire resource group in one simple step later.

Cloud Shell で az group create コマンドを使用して、リソース グループを作成します。In the Cloud Shell, create a resource group with the az group create command. 次の例では、myResourceGroup という名前のリソース グループを "西ヨーロッパ" の場所に作成します。The following example creates a resource group named myResourceGroup in the West Europe location. Basic レベルの Linux 上の App Service がサポートされているすべての場所を表示するには、az appservice list-locations --sku B1 --linux-workers-enabled コマンドを実行します。To see all supported locations for App Service on Linux in Basic tier, run the az appservice list-locations --sku B1 --linux-workers-enabled command.

az group create --name myResourceGroup --location "West Europe"

通常は、現在地付近の地域にリソース グループおよびリソースを作成します。You generally create your resource group and the resources in a region near you.

コマンドが完了すると、リソース グループのプロパティが JSON 出力に表示されます。When the command finishes, a JSON output shows you the resource group properties.

Linux App Service プランの作成Create a Linux App Service plan

Cloud Shell で az appservice plan create コマンドを使用して、リソース グループに App Service プランを作成します。In the Cloud Shell, create an App Service plan in the resource group with the az appservice plan create command.

次の例では、Basic 価格レベル (--sku B1) の myAppServicePlan という名前の App Service プランを Linux コンテナー (--is-linux) に作成します。The following example creates an App Service plan named myAppServicePlan in the Basic pricing tier (--sku B1) and in a Linux container (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku B1 --is-linux

App Service プランが作成されると、Azure CLI によって、次の例のような情報が表示されます。When the App Service plan has been created, the Azure CLI shows information similar to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Web アプリを作成するCreate a web app

Cloud Shell で az webapp create コマンドを使用して、myAppServicePlan App Service プランに Web アプリを作成します。In the Cloud Shell, create a web app in the myAppServicePlan App Service plan with the az webapp create command. 必ず を一意のアプリ名に、<docker-ID> をお使いの Docker ID に置き換えてください。Don't forget to replace with a unique app name, and <docker-ID> with your Docker ID.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app_name> --deployment-container-image-name <docker-ID>/mydockerimage:v1.0.0

Web アプリが作成されると、Azure CLI によって次の例のような出力が表示されます。When the web app has been created, the Azure CLI shows output similar to the following example:

{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

環境変数を構成するConfigure environment variables

ほとんどの Docker イメージには、構成する必要がある環境変数があります。Most Docker images have environment variables that need to be configured. 他のユーザーによって作成された既存の Docker イメージを使用する場合、イメージは 80 以外のポートを使用する場合があります。If you are using an existing Docker image built by someone else, the image may use a port other than 80. イメージが使用するポートを Azure に指示するには、WEBSITES_PORT アプリケーション設定を使用します。You tell Azure about the port that your image uses by using the WEBSITES_PORT app setting. このチュートリアルに含まれる Python サンプルの GitHub ページは、WEBSITES_PORT8000 に設定する必要があることを示しています。The GitHub page for the Python sample in this tutorial shows that you need to set WEBSITES_PORT to 8000.

アプリ設定を設定するには、Cloud Shell で az webapp config appsettings set コマンドを使用します。To set app settings, use the az webapp config appsettings set command in the Cloud Shell. アプリケーション設定は、大文字と小文字を区別し、スペースで区切られます。App settings are case-sensitive and space-separated.

az webapp config appsettings set --resource-group myResourceGroup --name <app_name> --settings WEBSITES_PORT=8000

注意

プライベート Docker レジストリからデプロイする場合は、Deploying from a Private Docker Registry? プライベート レジストリから Docker イメージを使用する」の省略可能な手順をご覧ください。See the optional instructions to Use a Docker image from any private registry.

Web アプリをテストするTest the web app

Web アプリの動作を確認するには、これを参照します (http://<app_name>.azurewebsites.net)。Verify that the web app works by browsing to it (http://<app_name>.azurewebsites.net).

Web アプリ ポート構成をテストする

Web アプリを変更して再デプロイするChange web app and redeploy

ローカルの Git リポジトリで、app/templates/app/index.html を開きます。In your local Git repository, open app/templates/app/index.html. 最初の HTML 要素を見つけて、それを次のように変更します。Locate the first HTML element and change it to.

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">         
        <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>       
      </div>            
    </div>
  </nav> 

Python ファイルを変更し、保存した後で、新しい Docker イメージをリビルドし、プッシュする必要があります。Once you've modified the Python file and saved it, you must rebuild and push the new Docker image. 次に、変更を反映するために Web アプリを再起動します。Then restart the web app for the changes to take effect. このチュートリアルで前に使用したのと同じコマンドを使用します。Use the same commands that you have previously used in this tutorial. Docker ファイルからイメージを作成する」と「Docker イメージを Docker Hub にプッシュする」をご覧ください。You can refer to Build the image from the Docker file and Push the Docker image to Docker Hub. Web アプリをテストする」の手順に従って、Web アプリをテストします。Test the web app by following the instructions in Test the web app.

SSH を使用して Web App for Containers に接続するConnect to Web App for Containers using SSH

SSH では、コンテナーとクライアント間の通信をセキュリティで保護できます。SSH enables secure communication between a container and a client. カスタム Docker イメージで SSH をサポートするには、Dockerfile に組み込む必要があります。In order for a custom Docker image to support SSH, you must build it into a Dockerfile. Docker ファイル自体で SSH を有効にします。You enable SSH in the Docker file itself. SSH 命令は既にサンプルの dockerfile に追加されているので、独自のカスタム イメージでこれらの手順に従うことができます。The SSH instructions have already been added to the sample dockerfile, so you can follow these instructions with your own custom image:

  • apt-get を呼び出してからルート アカウントのパスワードを "Docker!" に設定する RUN 命令。A RUN instruction that calls apt-get, then sets the password for the root account to "Docker!".

    ENV SSH_PASSWD "root:Docker!"
    RUN apt-get update \
            && apt-get install -y --no-install-recommends dialog \
            && apt-get update \
      && apt-get install -y --no-install-recommends openssh-server \
      && echo "$SSH_PASSWD" | chpasswd 
    

    注意

    この構成では、コンテナーへの外部接続は許可されません。This configuration does not allow external connections to the container. SSH は Kudu/SCM サイトを通してのみ利用できます。SSH is available only through the Kudu/SCM Site. Kudu/SCM サイトは、資格情報を発行することで認証されます。The Kudu/SCM site is authenticated with the publishing credentials.

  • Docker エンジンに sshd_config ファイルを "/etc/ssh/" ディレクトリにコピーするよう指示する COPY 命令。A COPY instruction that instructs the Docker engine to copy the sshd_config file to the /etc/ssh/ directory. 構成ファイルはこの sshd_config ファイルに基づく必要があります。Your configuration file should be based on this sshd_config file.

    COPY sshd_config /etc/ssh/
    

    注意

    sshd_config ファイルには次の項目を指定する必要があります。The sshd_config file must include the following items:

    • Ciphers には、aes128-cbc,3des-cbc,aes256-cbc の項目を少なくとも 1 つ含める必要があります。Ciphers must include at least one item in this list: aes128-cbc,3des-cbc,aes256-cbc.
    • MACs には、hmac-sha1,hmac-sha1-96 の項目を少なくとも 1 つ含める必要があります。MACs must include at least one item in this list: hmac-sha1,hmac-sha1-96.
  • コンテナーでポート 2222 を公開する EXPOSE 命令。An EXPOSE instruction that exposes port 2222 in the container. ルート パスワードはわかっていますが、ポート 2222 はインターネットからアクセスすることはできません。Although the root password is known, port 2222 cannot be accessed from the internet. それはプライベート仮想ネットワークのブリッジ ネットワーク内でコンテナーのみがアクセスできる内部ポートです。It is an internal port accessible only by containers within the bridge network of a private virtual network. その後、コマンドが SSH 構成の詳細をコピーし、ssh サービスを起動します。After that, commands copy SSH configuration details and start the ssh service.

    EXPOSE 8000 2222
    
  • /bin ディレクトリ内のシェル スクリプトを使用して ssh サービスを開始してください。Make sure to start the ssh service by using a shell script in the /bin directory.

    #!/bin/bash
    service ssh start
    

コンテナーへの SSH 接続 を開くOpen SSH connection to container

Web App for Containers では、コンテナーへの外部接続は許可されません。Web App for Containers does not allow external connections to the container. SSH は Kudu サイトを通してのみ利用できます。Kudo サイトには https://<app_name>.scm.azurewebsites.net からアクセスできます。SSH is available only through the Kudu site, which is accessible at https://<app_name>.scm.azurewebsites.net.

接続するには、https://<app_name>.scm.azurewebsites.net/webssh/host に移動し、Azure アカウントでサインインします。To connect, browse to https://<app_name>.scm.azurewebsites.net/webssh/host and sign in with your Azure account.

その後、対話型コンソールを表示するページにリダイレクトされます。You are then redirected to a page displaying an interactive console.

特定のアプリケーションがコンテナーで実行されていることを確認できます。You may wish to verify that certain applications are running in the container. コンテナーを検査し、実行中のプロセスを確認するには、プロンプトで top コマンドを発行します。To inspect the container and verify running processes, issue the top command at the prompt.

top

top コマンドは、コンテナー内のすべての実行中のプロセスを公開します。The top command exposes all running processes in a container.

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1 root      20   0  945616  35372  15348 S  0.0  2.1   0:04.63 node
20 root      20   0   55180   2776   2516 S  0.0  0.2   0:00.00 sshd
42 root      20   0  944596  33340  15352 S  0.0  1.9   0:05.80 node /opt/s+
56 root      20   0   59812   5244   4512 S  0.0  0.3   0:00.93 sshd
58 root      20   0   20228   3128   2664 S  0.0  0.2   0:00.00 bash
62 root      20   0   21916   2272   1944 S  0.0  0.1   0:03.15 top
63 root      20   0   59812   5344   4612 S  0.0  0.3   0:00.03 sshd
65 root      20   0   20228   3140   2672 S  0.0  0.2   0:00.00 bash
71 root      20   0   59812   5380   4648 S  0.0  0.3   0:00.02 sshd
73 root      20   0   20228   3160   2696 S  0.0  0.2   0:00.00 bash
77 root      20   0   21920   2304   1972 R  0.0  0.1   0:00.00 top

お疲れさまでした。Congratulations! Web App for Containers のカスタム Docker イメージの構成が完了しました。You've configured a custom Docker image for a Web App for Containers.

(省略可能) Docker Hub からプライベート イメージを使用するUse a private image from Docker Hub (optional)

Web アプリを作成する」では、az webapp create コマンドで Docker Hub のイメージを指定しました。In Create a web app, you specified an image on Docker Hub in the az webapp create command. パブリック イメージの場合はこれで十分です。This is good enough for a public image. プライベート イメージを使用するには、Azure Web アプリで Docker アカウント ID とパスワードを構成する必要があります。To use a private image, you need to configure your Docker account ID and password in your Azure web app.

Cloud Shell で、az webapp create コマンドの後に az webapp config container set を続けます。In the Cloud Shell, follow the az webapp create command with az webapp config container set. <app_name> を置き換え、さらに <docker-id><password> も Docker ID とパスワードに置き換えます。Replace <app_name>, and also <docker-id> and <password> with your Docker ID and password.

az webapp config container set --name <app_name> --resource-group myResourceGroup --docker-registry-server-user <docker-id> --docker-registry-server-password <password>

コマンドは、次の JSON 文字列のような出力を表示し、構成が正常に変更されたことを示します。The command reveals output similar to the following JSON string, showing that the configuration change succeeded:

[
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "false"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
    "slotSetting": false,
    "value": "<docker-id>"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
    "slotSetting": false,
    "value": null
  },
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "DOCKER|<image-name-and-tag>"
  }
]

プライベート レジストリから Docker イメージを使用する (省略可能)Use a Docker image from any private registry (optional)

このセクションでは、Web App for Containers でプライベート レジストリから Docker イメージを使用する方法について説明します。例として Azure Container Registry を使用します。In this section, you learn how to use a Docker image from a private registry in Web App for Containers, and it uses Azure Container Registry as an example. その他のプライベート レジストリを使用するための手順も同様です。The steps for using other private registries are similar.

Azure Container Registry は、プライベート イメージをホスティングするために Azure から管理される Docker サービスです。Azure Container Registry is a managed Docker service from Azure for hosting private images. デプロイには、Docker SwarmKubernetes、Web App for Containers などの任意の種類を使用できます。The deployments may be any type, including Docker Swarm, Kubernetes, and Web App for Containers.

Azure Container Registry を作成するCreate an Azure Container Registry

Cloud Shell で、az acr create コマンドを使用して Azure Container Registry を作成します。In the Cloud Shell, use the az acr create command to create an Azure Container Registry. 名前、リソース グループ、SKU として Basic を渡します。Pass in the name, resource group, and Basic for the SKU. 利用可能な SKU は ClassicBasicStandardPremium です。Available SKUs are Classic, Basic, Standard, and Premium.

az acr create --name <azure-container-registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled true

コンテナーを作成すると、次の出力が生成されます。Creating a container produces the following output:

 - Finished ..
Create a new service principal and assign access:
  az ad sp create-for-rbac --scopes /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<azure-container-registry-name> --role Owner --password <password>

Use an existing service principal and assign access:
  az role assignment create --scope /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<azure-container-registry-name> --role Owner --assignee <app-id>
{
  "adminUserEnabled": false,
  "creationDate": "2017-08-09T04:21:09.654153+00:00",
  "id": "/subscriptions/<subscriptionId>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<azure-container-registry-name>",
  "location": "westeurope",
  "loginServer": "<azure-container-registry-name>.azurecr.io",
  "name": "<azure-container-registry-name>",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "storageAccount": {
    "name": "myazurecontainerre042025"
  },
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

Azure Container Registry にログインするLog in to Azure Container Registry

レジストリにイメージをプッシュするには、レジストリがプッシュを受け入れるように資格情報を指定する必要があります。In order to push an image to the registry, you need to supply credentials so the registry accepts the push. これらの資格情報は、Cloud Shell で az acr show コマンドを使用して取得することができます。You can retrieve these credentials by using the az acr show command in the Cloud Shell.

az acr credential show --name <azure-container-registry-name>

このコマンドでは、ユーザー名に使用できる 2 つのパスワードが表示されます。The command reveals two passwords that can be used with the user name.

<
  "passwords": [
    {
      "name": "password",
      "value": "{password}"
    },
    {
      "name": "password2",
      "value": "{password}"
    }
  ],
  "username": "<registry-username>"
}

ローカルのターミナル ウィンドウから、docker login コマンドを使用して Azure Container Registry にログインします。From your local terminal window, log in to the Azure Container Registry using the docker login command. ログインするには、サーバー名が必要です。The server name is required to log in. {azure-container-registry-name>.azurecr.io の形式を使用します。Use the format {azure-container-registry-name>.azurecr.io. プロンプトで、コンソールにパスワードを入力します。Type in your password into the console at the prompt.

docker login <azure-container-registry-name>.azurecr.io --username <registry-username>

ログインが成功したことを確認します。Confirm that the login succeeded.

Azure Container Registry へのイメージのプッシュPush an image to Azure Container Registry

注意

独自のイメージを使用している場合は、次のようにイメージにタグ付けします。If you're using your own image, tag the image as follows:

docker tag <azure-container-registry-name>.azurecr.io/mydockerimage

コマンド docker push を使用してイメージをプッシュします。Push the image by using the docker push command. レジストリの名前、イメージの名前、およびタグでイメージをタグ付けします。Tag the image with the name of the registry, followed by your image name and tag.

docker push <azure-container-registry-name>.azurecr.io/mydockerimage:v1.0.0

ACR リポジトリを一覧表示して、プッシュによってコンテナーがレジストリに正常に追加されたことを確認します。Verify that the push successfully added a container to the registry by listing the ACR repositories.

az acr repository list -n <azure-container-registry-name>

レジストリ内のイメージを一覧表示することで、mydockerimage がレジストリに存在することを確認します。Listing the images in the registry confirms that mydockerimage is in the registry.

[
  "mydockerimage"
]

Azure Container Registry (または任意のプライベート レジストリ) からイメージを使用するように Web アプリを構成するConfigure Web App to use the image from Azure Container Registry (or any private registry)

Azure Container Registry に格納されているコンテナーを実行するように、Web App for Containers を構成できます。You can configure Web App for Containers so that it runs a container stored in the Azure Container Registry. Azure Container Registry の使用はプライベート レジストリの使用と同様であるため、独自のプライベート レジストリを使用する必要がある場合、このタスクを完了する手順も同様です。Using the Azure Container Registry is just like using any private registry, so if you need to use your own private registry, the steps to complete this task are similar.

Cloud Shell で az acr credential show を実行して、Azure Container Registry のユーザー名とパスワードを表示します。In the Cloud Shell, run az acr credential show to display the username and password for the Azure Container Registry. 次の手順で Web アプリの構成に使用できるように、ユーザー名とパスワードの 1 つをコピーします。Copy the username and one of the passwords so you can use it to configure the web app in the next step.

az acr credential show --name <azure-container-registry-name>
{
  "passwords": [
    {
      "name": "password",
      "value": "password"
    },
    {
      "name": "password2",
      "value": "password2"
    }
  ],
  "username": "<registry-username>"
}

Cloud Shell で az webapp config container set コマンドを実行して、カスタム Docker イメージを Web アプリに割り当てます。In the Cloud Shell, run the az webapp config container set command to assign the custom Docker image to the web app. <app_name><docker-registry-server-url><registry-username><password> を置き換えます。Replace <app_name>, <docker-registry-server-url>, <registry-username>, and <password>. Azure Container Registry では、<docker-registry-server-url>https://<azure-container-registry-name>.azurecr.io の形式になります。For Azure Container Registry, <docker-registry-server-url> is in the format https://<azure-container-registry-name>.azurecr.io. Docker Hub に加えてレジストリを使用している場合は、イメージ名をレジストリの完全修飾ドメイン名 (FQDN) で始める必要があります。If you are using any registry besides Docker Hub, the image name needs to begin with the fully-qualified domain name (FQDN) of your registry. Azure Container Registry の場合は、<azure-container-registry>.azurecr.io/mydockerimage のように記述します。For Azure Container Registry, this will look like <azure-container-registry>.azurecr.io/mydockerimage.

az webapp config container set --name <app_name> --resource-group myResourceGroup --docker-custom-image-name <azure-container-registry-name>.azurecr.io/mydockerimage --docker-registry-server-url https://<azure-container-registry-name>.azurecr.io --docker-registry-server-user <registry-username> --docker-registry-server-password <password>

注意

<docker-registry-server-url> には https:// が必要です。https:// is required in <docker-registry-server-url>.

コマンドは、次の JSON 文字列のような出力を表示し、構成が正常に変更されたことを示します。The command reveals output similar to the following JSON string, showing that the configuration change succeeded:

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "slotSetting": false,
    "value": "mydockerimage"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_URL",
    "slotSetting": false,
    "value": "<azure-container-registry-name>.azurecr.io"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
    "slotSetting": false,
    "value": "<registry-username>"
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
    "slotSetting": false,
    "value": null
  }
]

デプロイのクリーンアップClean up deployment

サンプル スクリプトの実行後は、次のコマンドを使用してリソース グループとすべての関連リソースを削除することができます。After the sample script has been run, the following command can be used to remove the resource group and all resources associated with it.

az group delete --name myResourceGroup

次の手順Next steps