注:
この記事はお役に立ちましたか? お客様の入力は、当社にとって重要です。 このページの [フィードバック ] ボタンを使用して、この記事がどれだけうまく機能したか、または改善する方法をお知らせください。
App Service on Linuxのリリースにより、機能の追加とプラットフォームの改善に取り組んでいます。 この記事では、お客様から最近質問された質問に対する回答を示します。
質問がある場合は、この記事にコメントしてください。
組み込みのイメージ
プラットフォームが提供する組み込みの Docker コンテナーをフォークする必要があります。 これらのファイルはどこで見つけることができますか?
すべての Docker ファイルは GitHub にあります。
ランタイム スタックを構成する場合の [スタートアップ ファイル] セクションに必要な値は何ですか?
スタック | 予期される値 |
---|---|
Java SE | JAR アプリを起動するコマンド (例: java -jar /home/site/wwwroot/app.jar --server.port=80 ) |
Tomcat | 必要な構成を実行するスクリプトの場所 (例: /home/site/deployments/tools/startup_script.sh ) |
Node.js | PM2 構成ファイルまたはスクリプト ファイル |
.NET Core | コンパイル済み DLL 名 dotnet <myapp>.dll |
PHP | オプション のカスタム スタートアップ |
Python | オプション のスタートアップ スクリプト |
Ruby | アプリを初期化する Ruby スクリプト |
これらのコマンドまたはスクリプトは、組み込みの Docker コンテナーが開始された後、アプリケーション コードが開始される前に実行されます。
管理
Azure portalの再起動ボタンを押すとどうなりますか?
このアクションは、Docker 再起動と同じです。
Secure Shell (SSH) を使用してアプリ コンテナー仮想マシン (VM) に接続できますか?
はい。これを行うには、ソース管理 (SCM) サイトを使用します。
注:
SSH、SFTP、または Visual Studio Code を使用して、ローカル開発マシンからアプリ コンテナーに直接接続することもできます (ライブ デバッグ Node.js アプリ用)。 詳細については、「App Service on Linuxでのリモート デバッグと SSH」を参照してください。
SDK または Azure Resource Manager テンプレートを使用して Linux App Service プランを作成するにはどうすればよいですか?
アプリ サービスの 予約 フィールドを true に設定 します。
継続的インテグレーションとデプロイ
Web アプリでは、Docker Hubでイメージを更新した後も、古い Docker コンテナー イメージが使用されます。 カスタム コンテナーの継続的インテグレーションとデプロイをサポートしていますか?
はい。Web App for Containers を使用した継続的なデプロイに従って、Azure Container Registryまたは DockerHub の継続的インテグレーション/デプロイを設定します。 プライベート レジストリの場合は、Web アプリを停止してから起動することで、コンテナーを更新できます。 または、ダミーのアプリケーション設定を変更または追加して、コンテナーを強制的に更新することもできます。
ステージング環境をサポートしていますか?
はい。
'WebDeploy/MSDeploy' を使用して Web アプリをデプロイできますか?
はい。false と呼ばれる WEBSITE_WEBDEPLOY_USE_SCM
アプリ設定を設定する必要 があります。
Linux Web アプリを使用すると、アプリケーションの Git デプロイが失敗します。 この問題を回避するにはどうすればよいですか?
Linux Web アプリへの Git デプロイが失敗した場合は、次のいずれかのオプションを選択してアプリケーション コードをデプロイします。
継続的デリバリー (プレビュー) 機能を使用する: アプリのソース コードを Azure DevOps Git リポジトリまたは GitHub リポジトリに格納して、Azure 継続的デリバリーを使用できます。 詳細については、「 Linux Web アプリの継続的デリバリーを構成する方法」を参照してください。
ZIP デプロイ API を使用する: この API を使用するには、Web アプリに SSH 接続し、コードをデプロイするフォルダーに移動します。 次のコードを実行します。
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
コマンドが見つからないというエラーが発生した場合は、前
curl
のcurl
コマンドを実行する前に を使用apt-get install curl
して curl をインストールしてください。
言語サポート
Node.js アプリケーション、特別な設定、または構成で Web ソケットを使用して設定しますか?
はい。サーバー側の Node.js コードで無効にします perMessageDeflate
。 たとえば、socket.io を使用している場合は、次のコードを使用します。
const io = require('socket.io')(server,{
perMessageDeflate :false
});
コンパイルされていない .NET Core アプリをサポートしていますか?
はい。
PHP アプリの依存関係マネージャーとして Composer をサポートしていますか?
はい。Git のデプロイ中に、Kudu は PHP アプリケーションをデプロイしていることを検出する必要があります (composer.lock ファイルが存在するため)、Kudu はコンポーザーのインストールをトリガーします。
カスタム コンテナー
イメージを ACR にプルするときに、App Serviceでマネージド ID を使用できますか?
自分のカスタム コンテナーを使用しています。 プラットフォームで SMB 共有を '/home/' ディレクトリにマウントする必要があります。
設定が指定されていないか false に設定されている場合WEBSITES_ENABLE_APP_SERVICE_STORAGE
、/home/
ディレクトリはスケール インスタンス間で共有されず、書き込まれたファイルは再起動しても保持されません。 明示的に true に設定WEBSITES_ENABLE_APP_SERVICE_STORAGE
すると、マウントが有効になります。 これが true に設定されたら、マウントを無効にする場合は、明示的に false に設定WEBSITES_ENABLE_APP_SERVICE_STORAGE
する必要があります。
コンテナーが "デバイスに空き領域が残っていない" で起動できない。 このエラーはどういう意味ですか?
App Service on Linuxでは、次の 2 種類のストレージが使用されます。
- ファイル システム ストレージ: ファイル システム ストレージは、App Service プラン クォータに含まれます。 これは、ディレクトリにルート化された
/home
永続ストレージにファイルが保存されるときに使用されます。 - ホスト ディスク領域: ホスト ディスク領域は、コンテナー イメージを格納するために使用されます。 これは、Docker ストレージ ドライバーを介してプラットフォームによって管理されます。
ホスト ディスク領域は、ファイル システムのストレージ クォータとは別です。 展開可能ではなく、インスタンスごとに 15 GB の制限があります。 これは、ワーカーにカスタム イメージを格納するために使用されます。 ホスト ディスク領域の正確な可用性によっては、15 GB を超える GB を使用できる場合がありますが、これは保証されません。
コンテナーの書き込み可能なレイヤーが、ディレクトリまたはマウントされた Azure ストレージ パスの/home
外部にデータを保存する場合、ホスト ディスク領域も使用されます。
プラットフォームは、ホスト ディスク領域を定期的にクリーンアップして、未使用のコンテナーを削除します。 コンテナーがディレクトリの外部または Bring Your Own Storage (BYOS) の外部に大量の /home
データを書き込む場合、ホスト ディスク領域の制限を超えると、起動エラーまたはランタイム例外が発生します。
Linux App Serviceで実行する場合は、コンテナー イメージをできるだけ小さくし、永続ストレージまたは BYOS にデータを書き込むようお勧めします。 可能でない場合は、ホスト ディスク領域が固定され、App Service プラン内のすべてのコンテナー間で共有されるため、App Service プランを分割する必要があります。
カスタム コンテナーの起動には長い時間がかかり、起動が完了する前にプラットフォームによってコンテナーが再起動されます。
プラットフォームがコンテナーを再起動するまでに待機する時間を構成できます。 これを行うには、アプリの設定を WEBSITES_CONTAINER_START_TIME_LIMIT
目的の値に設定します。 既定値は 230 秒で、最大値は 1800 秒です。
プライベート レジストリ サーバー URL の形式は何ですか?
または https://
を含むhttp://
完全なレジストリ URL を指定します。
プライベート レジストリ オプションのイメージ名の形式は何ですか?
プライベート レジストリ URL (myacr.azurecr.io/dotnet:latest など) を含む完全なイメージ名を追加します。 カスタム ポートを使用するイメージ名 は、ポータルから入力できません。 を設定docker-custom-image-name
するには、コマンド ライン ツールをaz
使用します。
カスタム コンテナー イメージで複数のポートを公開できますか?
複数のポートの公開はサポートされていません。
自分のストレージを持ち込むことはできますか?
はい。 独自のストレージを持ち込む のはプレビュー段階です。
カスタム コンテナーのファイル システムまたは SCM サイトから実行中のプロセスを参照できないのはなぜですか?
SCM サイトは別のコンテナーで実行されます。 ファイル システムまたはアプリ コンテナーの実行中のプロセスをチェックすることはできません。
カスタム コンテナーに HTTPS を実装する必要がありますか?
いいえ。プラットフォームは、共有フロントエンドで HTTPS 終了を処理します。
カスタム コンテナーにWEBSITES_PORTを使用する必要がありますか?
はい。これはカスタム コンテナーに必要です。 カスタム ポートを手動で構成するには、Dockerfile の EXPOSE 命令と、コンテナーにバインドするポート値を使用して、アプリ設定WEBSITES_PORTを使用します。
Docker イメージでASPNETCORE_URLSを使用できますか?
はい。.NET Core アプリが起動する前に環境変数を上書きします。 たとえば、init.sh スクリプトでは、ASPNETCORE_URLS={Your value} をエクスポートします。
Docker Compose を使用したマルチコンテナー
操作方法マルチコンテナーで使用するようにAzure Container Registry (ACR) を構成しますか?
マルチコンテナーで ACR を使用するには、 すべてのコンテナー イメージ を同じ ACR レジストリ サーバーでホストする必要があります。 同じレジストリ サーバー上に配置されたら、アプリケーション設定を作成し、Docker Compose 構成ファイルを更新して ACR イメージ名を含める必要があります。
次のアプリケーション設定を作成します。
- DOCKER_REGISTRY_SERVER_USERNAME
- DOCKER_REGISTRY_SERVER_URL (完全な URL、例:
https://<server-name>.azurecr.io
) - DOCKER_REGISTRY_SERVER_PASSWORD (ACR 設定で管理者アクセスを有効にする)
構成ファイル内で、次の例のように ACR イメージを参照します。
image: <server-name>.azurecr.io/<image-name>:<tag>
インターネットにアクセスできるコンテナー操作方法知っていますか?
- アクセス用に開くことができるコンテナーは 1 つだけです
- アクセス可能なポートは、ポート 80 と 8080 のみです (公開ポート)
アクセス可能なコンテナーを優先順位の順に決定するための規則を次に示します。
- コンテナー名に設定されたアプリケーション設定
WEBSITES_WEB_CONTAINER_NAME
- ポート 80 または 8080 を定義する最初のコンテナー
- 上記のどちらも当てはまらない場合、ファイルで定義されている最初のコンテナーにアクセスできます (公開されます)
depends_on操作方法使用しますか?
オプションはdepends_on
、App Serviceではサポートされていないため、無視されます。
Docker からの制御の起動とシャットダウンの推奨事項と同様に、App Serviceマルチコンテナー アプリは、起動時と切断時の両方で、アプリケーション コードを介して依存関係をチェックする必要があります。
次のコード例は、Redis コンテナーが実行されているかどうかを確認する Python アプリのチェックを示しています。
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80, debug=True)
Web ソケット
Web ソケットは Linux アプリでサポートされています。 Web ソケットは webSocketsEnabled
常に Linux に対して有効になっているため、ARM 設定は Linux アプリには適用されません。
重要
Web ソケットは、Free App Service プランの Linux アプリでサポートされるようになりました。 Free App Service プランでは、最大 5 つの Web ソケット接続をサポートしています。 この制限を超えると、HTTP 429 (要求が多すぎます) 応答が発生します。
価格と SLA
サービスが一般公開されたので、価格は何ですか?
価格は SKU とリージョンによって異なりますが、価格の詳細については、「App Service価格」ページを参照してください。
その他の質問
コンテナーウォームアップ要求のしくみ
Azure アプリ Services がコンテナーを起動すると、ウォームアップ要求はアプリケーションの /robots933456.txt エンドポイントに HTTP 要求を送信します。 これは単なるダミー エンドポイントですが、アプリケーションは 5XX 以外の状態コードで応答する必要があります。 アプリケーション ロジックが存在しないエンドポイントに対して HTTP 状態コードで応答しない場合、ウォームアップ要求は応答を受け取ることができず、コンテナーを永続的に再起動します。 ウォームアップ要求は、ポートの構成ミスが原因で失敗する可能性もあります。
Azure アプリ サービスでポートが正しく構成されていることを確認するには、Linux コンテナーでポートを指定操作方法質問を参照してください。
コンテナーウォームアップ要求のタイムアウトを増やすことはできますか?
コンテナーからの応答を 240 秒待機した後、ウォームアップ要求は既定で失敗します。 コンテナーウォームアップ要求のタイムアウトを増やすには、240 ~ 1800 秒の値を持つアプリケーション設定 WEBSITES_CONTAINER_START_TIME_LIMIT
を追加します。
Linux コンテナーでポートを指定操作方法?
コンテナーの種類 | 説明 | ポートを設定/使用する方法 |
---|---|---|
組み込みのコンテナー | Linux アプリの言語/フレームワーク バージョンを選択すると、定義済みのコンテナーが選択されます。 | アプリ コードを適切なポートにポイントするには、PORT 環境変数を使用します。 |
カスタム コンテナー | コンテナーを完全に制御できます。 | App Serviceには、コンテナーがリッスンするポートに関する制御はありません。 必要なのは、要求を転送するポートを把握することです。 コンテナーがポート 80 または 8080 をリッスンしている場合、App Serviceはそれを自動的に検出できます。 他のポートをリッスンする場合は、WEBSITES_PORT アプリ設定をポート番号に設定し、App Serviceは要求をコンテナー内のそのポートに転送する必要があります。 WEBSITES_PORT アプリの設定はコンテナー内では何の影響も及びないため、コンテナー内の環境変数としてアクセスすることはできません。 |
Linux Webapp でファイル ベースのデータベース (SQLite など) を使用できますか?
アプリケーションのファイル システムは、マウントされたネットワーク共有です。 これにより、コードを複数のホスト間で実行する必要があるスケールアウト シナリオが可能になります。 残念ながら、これは、データベース ファイルに対して排他的ロックを取得できないため、SQLite のようなファイル ベースのデータベース プロバイダーの使用をブロックします。 マネージド データベース サービスをお勧めします:Azure SQL、Azure Database for MySQL、またはAzure Database for PostgreSQL
アプリケーション設定名でサポートされている文字は何ですか?
アプリケーション設定には、文字 (A-Z、a-z)、数字 (0 から 9)、アンダースコア文字 (_) のみを使用できます。
新機能はどこで要求できますか?
アイデアは、Web Apps フィードバック フォーラムで送信できます。 アイデアのタイトルに "[Linux]" を追加します。
次の手順
- Linux でAzure App Serviceとは
- Azure App Serviceでステージング環境を設定する
- Web App for Containers を使用した継続的デプロイ
- 知っておくべきこと: Web Appsと Linux
- 環境変数とアプリ設定のリファレンス
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。