Windows Containers を使って ASP.NET アプリケーションの Dockernize を行う上で最大の問題となる、Server Core な Docker Image のサイズが 17079 で更に削減されました。
ブログでは 30% 削減されたと書いてありますが、実際のサイズはダウンロード時が 1.58GB で展開後のディスク上では 3.61GB にまで小さくなったらしいです。
初期の Docker Image は展開後 10GB あったことを考えると 1/3 近くになってます。
他にも MSMQ がプリインストールされたとか、アプリケーションの互換性が向上したとありますが、具体的にどう変わったかは公開されてないので分からないです。
Virtualization のブログではもっと詳細な内容が公開されているので面白いです。
今回のイメージサイズ削減は Nano Server と同じ方法を使って削減したとか、利用者から送信されるテレメトリーから使われていない機能を削除したとか、非常に興味深い話です。テレメトリーを使っているので、今後も使っていくほどにサイズが小さくなっていく可能性がありますね。*1
まだ WOW64 が残っているらしいので、今後削除が行われると更に小さくなる可能性がありそうです。
今回のビルドでは In-place Upgrade がやっと行えるようになったらしいですが、例によって Semi-Annual な Windows Server は Server Core しか提供されておらず使いにくいので、検証には Windows 10 Insider Preview を使いました。
カーネルのバージョンが異なっていますが、Hyper-V Containers なら問題なく扱えるようになってます。とりあえずメジャーな Docker Image を pull してきてサイズを比較してみました。
windowsservercore-insider と windowsservercore:1709 の差が大きいですね。Nano Server も小さくなっているように見えますが、Windows Update でレイヤーが増えた結果かもしれないので確証はありません。
Server とは関係ないですが、最新の Windows 10 Insider Preview Build 17083 でもループバックアドレスで、実行中のコンテナにアクセス出来るようになっていました。これはやっぱり地味に嬉しい。
Insider Preview な Server Core には IIS が入ったものがないので 1709 で試してますが、問題なく localhost でアクセスが出来ています。RS4 からは inspect する必要が無くなります。
慣例的に Insider Preview な Server Core 向けには ASP.NET 向けのイメージも公開されないので、試して見たい場合には公開されている Dockerfile を使って自前でビルドする形になります。
ちなみに ASP.NET 4.7 のイメージを作ってもサイズは結構小さいままでした。
とりあえず ASP.NET MVC 5 アプリケーションを動かすイメージをビルドして実行してみました。当然ですが、何の問題もなく普通に動きます。
Server Core のサイズが小さくならないと ASP.NET アプリケーションの Dockernize は現実的ではないスタンスでいましたが、現実的なサイズになってきたので嬉しいですね。後は CI SaaS で使えるようになれば準備が整いそうです。
RS4 でやっと Windows Containers が現実的な時間で扱えるようになりそうです。
*1:ちなみに削除された機能の一覧はこれ https://gist.github.com/weijuans/19a04903a24487c296effa3f88b603e6