Azure App Service のカスタム Linux コンテナーを構成するConfigure a custom Linux container for Azure App Service

この記事では、Azure App Service を実行するようにカスタム Linux コンテナーを構成する方法を示します。This article shows you how to configure a custom Linux container to run on Azure App Service.

このガイドでは、App Service の Linux アプリのコンテナー化の主要概念および手順について説明します。This guide provides key concepts and instructions for containerization of Linux apps in App Service. Azure App Service を使用したことがない場合は、最初にカスタム コンテナー クイック スタートチュートリアルに従ってください。If you've never used Azure App Service, follow the custom container quickstart and tutorial first. 複数コンテナー アプリのクイック スタートチュートリアルもあります。There's also a multi-container app quickstart and tutorial.

ポート番号を構成するConfigure port number

カスタム イメージの Web サーバーは、80 以外のポートを使用できます。The web server in your custom image may use a port other than 80. カスタム コンテナーによって利用されるポートを Azure に指示するには、WEBSITES_PORT アプリ設定を使用します。You tell Azure about the port that your custom container 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 コマンドを実行することにより設定できます。You can set it by running az webapp config appsettings set command in the Cloud Shell. 例:For example:

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

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

カスタム コンテナーには、外部で指定する必要がある環境変数を使用できます。Your custom container may use environment variables that need to be supplied externally. Cloud Shell で az webapp config appsettings set コマンドを実行することによりこれらを渡すことができます。You can pass them in by running az webapp config appsettings set command in the Cloud Shell. 例:For example:

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings WORDPRESS_DB_HOST="myownserver.mysql.database.azure.com"

この方法は単一のコンテナー アプリまたは複数のコンテナー アプリの両方で利用できます。ただし、環境変数は docker compose.yml ファイルで指定されます。This method works both for single-container apps or multi-container apps, where the environment variables are specified in the docker-compose.yml file.

永続的な共有ストレージを使用するUse persistent shared storage

アプリのファイル システムの /home ディレクトリを使用して、再起動間でファイルを永続化し、インスタンス間でそれらを共有することができます。You can use the /home directory in your app's file system to persist files across restarts and share them across instances. アプリの /home は、コンテナー アプリが永続的ストレージにアクセスできるようにするために指定されます。The /home in your app is provided to enable your container app to access persistent storage.

永続的ストレージが無効になると、/home ディレクトリへの書き込みは、アプリの再起動後、または複数のインスタンス間で保持されません。When persistent storage is disabled, then writes to the /home directory aren't persisted across app restarts or across multiple instances. 唯一の例外は /home/LogFiles ディレクトリであり、これは Docker およびコンテナーのログを格納するために使用されます。The only exception is the /home/LogFiles directory, which is used to store the Docker and container logs. 永続的ストレージが有効になると、/home ディレクトリへのすべての書き込みは存続し、スケールアウトされたアプリのすべてのインスタンスからアクセスできます。When persistent storage is enabled, all writes to the /home directory are persisted and can be accessed by all instances of a scaled-out app.

既定では、永続的ストレージが有効になり、設定はアプリケーション設定では公開されません。By default, persistent storage is enabled and the setting is not exposed in the Application Settings. これを無効にするには、Cloud Shell で az webapp config appsettings set コマンドを実行することにより WEBSITES_ENABLE_APP_SERVICE_STORAGE アプリ設定を指定します。To disable it, set the WEBSITES_ENABLE_APP_SERVICE_STORAGE app setting by running az webapp config appsettings set command in the Cloud Shell. 例:For example:

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

注意

独自の永続的ストレージを構成することもできます。You can also configure your own persistent storage.

SSH を有効にするEnable SSH

SSH では、コンテナーとクライアント間の通信をセキュリティで保護できます。SSH enables secure communication between a container and a client. カスタム コンテナーで SSH をサポートするために、Dockerfile 自体に追加する必要があります。In order for a custom container to support SSH, you must add it into the Dockerfile itself.

ヒント

すべての組み込み Linux コンテナーは、そのイメージ リポジトリ内に SSH 命令を追加しました。All built-in Linux containers have added the SSH instructions in their image repositories. Node.js 10.14 リポジトリで次のとおり実行し、それをそこで有効にする方法を表示できます。You can go through the following instructions with the Node.js 10.14 repository to see how it's enabled there.

  • RUN 命令を使用して、SSH サーバーをインストールし、ルート アカウントのパスワードを "Docker!" に設定します。Use the RUN instruction to install the SSH server and set the password for the root account to "Docker!". たとえば、Alpine Linux に基づくイメージの場合、次のコマンドが必要です。For example, for an image based on Alpine Linux, you need the following commands:

    RUN apk add openssh \
         && echo "root:Docker!" | chpasswd 
    

    この構成は、コンテナーへの外部接続を許可しません。This configuration doesn't allow external connections to the container. SSH は https://<app-name>.scm.azurewebsites.net を通じてのみ利用でき、公開用の資格情報で認証されます。SSH is available only through https://<app-name>.scm.azurewebsites.net and authenticated with the publishing credentials.

  • この sshd_config ファイルをイメージ リポジトリに追加し、COPY 命令を使用してファイルを /etc/ssh/ ディレクトリにコピーします。Add this sshd_config file to your image repository, and use the COPY instruction to copy the file to the /etc/ssh/ directory. sshd_config ファイルの詳細については、OpenBSD ドキュメントを参照してください。For more information about sshd_config files, see OpenBSD documentation.

    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.
  • EXPOSE 命令を使用して、コンテナーでポート 2222 を開きます。Use the EXPOSE instruction to open port 2222 in the container. ルート パスワードはわかっていますが、ポート 2222 にはインターネットからアクセスできません。Although the root password is known, port 2222 is inaccessible from the internet. それには、プライベート仮想ネットワークのブリッジ ネットワーク内でコンテナーのみがアクセスできます。It's accessible only by containers within the bridge network of a private virtual network.

    EXPOSE 80 2222
    
  • コンテナーのスタートアップ スクリプトで、SSH サーバーを起動します。In the start-up script for your container, start the SSH server.

    /usr/sbin/sshd
    

    例については、既定の Node.js 10.14 コンテナーが SSH サーバーを起動する方法を参照してください。For an example, see how the default Node.js 10.14 container starts the SSH server.

診断ログにアクセスするAccess diagnostic logs

コンテナー内から生成されたコンソール ログにアクセスできます。You can access the console logs generated from inside the container. まず、Cloud Shell で次のコマンドを実行して、コンテナーのログ記録をオンにします。First, turn on container logging by running the following command in the Cloud Shell:

az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem

コンテナーのログ記録がオンになったら、次のコマンドを実行して、ログのストリームを確認します。Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group myResourceGroup

コンソール ログがすぐに表示されない場合は、30 秒以内にもう一度確認します。If you don't see console logs immediately, check again in 30 seconds.

注意

https://<app-name>.scm.azurewebsites.net/api/logs/docker で、ブラウザーからログ ファイルを検査することもできます。You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

任意のタイミングでログのストリーミングを停止するには、Ctrl + C と入力します。To stop log streaming at any time, type Ctrl+C.

複数コンテナー アプリを構成するConfigure multi-container apps

Docker Compose で永続的なストレージを使用するUse persistent storage in Docker Compose

WordPress のような複数コンテナー アプリでは、永続的ストレージが適切に機能する必要があります。Multi-container apps like WordPress need persistent storage to function properly. 有効にするには、Docker Compose 構成が、コンテナーの保存場所を指す必要があります。To enable it, your Docker Compose configuration must point to a storage location outside your container. コンテナー内部の保存場所では、アプリの再起動後に変更内容が保持されません。Storage locations inside your container don't persist changes beyond app restart.

WEBSITES_ENABLE_APP_SERVICE_STORAGE アプリ設定を指定して、Cloud Shell で az webapp config appsettings set コマンドを使用し、永続的ストレージを有効にします。Enable persistent storage by setting the WEBSITES_ENABLE_APP_SERVICE_STORAGE app setting, using the az webapp config appsettings set command in Cloud Shell.

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

docker-compose.yml ファイルで、volumes オプションを ${WEBAPP_STORAGE_HOME} にマップします。In your docker-compose.yml file, map the volumes option to ${WEBAPP_STORAGE_HOME}.

WEBAPP_STORAGE_HOME は、アプリの永続的なストレージにマップされる App Service の環境変数です。WEBAPP_STORAGE_HOME is an environment variable in App Service that is mapped to persistent storage for your app. 例:For example:

wordpress:
  image: wordpress:latest
  volumes:
  - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
  - ${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin
  - ${WEBAPP_STORAGE_HOME}/LogFiles:/var/log

プレビューの制限事項Preview limitations

複数コンテナーは現在プレビュー段階です。Multi-container is currently in preview. 次の App Service プラットフォーム機能はサポートされません。The following App Service platform features are not supported:

  • 認証/認可Authentication / Authorization
  • マネージド IDManaged Identities

Docker Compose のオプションDocker Compose options

以下の一覧は、Docker Compose 構成オプションでサポートされているものとサポートされていないものを示しています。The following lists show supported and unsupported Docker Compose configuration options:

サポートされているオプションSupported options

  • commandcommand
  • entrypointentrypoint
  • 環境environment
  • imageimage
  • portsports
  • restartrestart
  • servicesservices
  • volumesvolumes

サポートされていないオプションUnsupported options

  • build (禁止)build (not allowed)
  • depends_on (無視)depends_on (ignored)
  • networks (無視)networks (ignored)
  • secrets (無視)secrets (ignored)
  • ports (80 および 8080 以外) (無視)ports other than 80 and 8080 (ignored)

注意

パブリック プレビューでは、ここで明示的に示されていないその他のオプションが無視されます。Any other options not explicitly called out are ignored in Public Preview.

VNet 統合の構成Configure VNet integration

VNet 統合でカスタム コンテナーを使用する場合は、追加のコンテナー構成が必要になることがあります。Using a custom container with VNet integration may require additional container configuration. アプリを Azure 仮想ネットワークに統合する」をご覧ください。See Integrate your app with an Azure Virtual Network.

次の手順Next steps