久し振りに Web App for Containers (Windows) を作成してみたら、ホスト OS が Windows Server 2019 にアップデートされてることに気が付きました。
正式リリースではないですがアップデートはほぼ確実でしょう。これで大幅にサイズが削減された Docker Image を使えるようになりそうです。
確認出来たのは West US の Premium Container だったので、、Windows Containers を現実的な時間で扱うためと、パブリックプレビュー中につき互換性問題が発生しないので早々にアップデートしたのでしょう。
前に書いた通り、Windows Server 2019 の Docker Image は 2016 と比較して 1/3 ぐらいになっています。
ただし今のところはベースとなる Server Core や Nano Server のイメージはキャッシュされていないようでした。GA までには改善されるのではないかと思っていますが、キャッシュされていたとしても Deployment Slot を使ったウォームアップは必須でしょう。
前に試した時には Hyper-V Containers なのか裏を取れてなかったですが、今回 2016 版の Nano Server + IIS なイメージをデプロイして動作を確認したので Hyper-V Containers で動いてると確認出来ました。
Process Isolation と異なりメモリ使用量が多いので、PC2 だと割とギリギリなケースが多そうです。実際に 4 サイト分を立ち上げたら、メモリ不足で最後のコンテナが上がってこなくなりました。
とりあえず実際に Windows Server 2019 ベースのイメージをデプロイして試しました。分かりやすくて手っ取り早いので、大体確認には IIS の Docker Image を使うようにしています。
IIS のいつもの画面を見せてもしょうがないので、Docker のログで LTSC 2019 でもコンテナが立ち上がってることを確認しました。Server Core のイメージがキャッシュされていないので時間はかかりましたが、それでも LTSC 2016 と比べると圧倒的に速いです。
今は Azure Portal 側のバリデーションが 2019 のイメージに対応していないので、Portal から 2019 のイメージを設定しようとするとエラーになります。ARM Explorer や Azure CLI からなら回避できるはずです。
Web App for Containers の Windows Server 2019 化によって実行環境は整いそうなので Docker Image のビルド周りを調べてみると、ACR Tasks がひっそりと Windows Server 2019 にアップデートされたようです。
これも実際に LTSC 2019 のイメージを使うように変更してビルドさせると、問題なく終わりました。
以前に調べた時は Version 1803 だったので、ACR Tasks は割と対応が早い方のようです。
ACR Tasks は Hyper-V Containers で動いていることを以前に確認していたので、もちろん LTSC 2019 より古いイメージも扱えるので現時点では最強感があります。
残念ながら Azure DevOps や AppVeyor などは 2019 にアップデートされていません。気長に待ちましょう。
今回は Web App for Containers (Windows) だけのアップデートでしたが、順当にいけば 2016 のアップデートの時のように、特定のリージョンから通常の App Service も 2019 になっていくのだと思います。