多分 .NET Framework 4.7.2 と .NET Core 2.1 のリリースを狙ったタイミングだと思っているのですが、この 2 つを利用するための公式 Docker Image のリポジトリが変更されています。
地味に同じようなのにイメージが異なっていた .NET 系の Docker Image が統合されて、シンプルなタグで使えるようになっているので便利です。古い方はもう更新されないので注意。
.NET Framework 向け
これまでは microsoft/dotnet-framework
と microsoft/dotnet-framework-build
で用途によってイメージ自体が分けられていましたが、現在は microsoft/dotnet-framework
側に統合されています。
- 4.7.2-sdk
- 4.7.2-runtime
SDK のイメージには Visual Studio Build Tools がインストールされているので、MSBuild を使ってアプリケーションをコンテナ内でビルドできるようになっています。*1
基本的には最新の .NET バージョンを対象にしているでしょうし、4.7.2 を使っておけばよいと思いますが、上のタグは LTSC 2016 の Server Core イメージが使われているのでサイズが大きいです。
必要に応じて 1709 や 1803 のイメージを使うと半分ぐらいで済むようになります。タグの詳細は Docker Hub を参照すればすぐにわかるはずです。
https://hub.docker.com/r/microsoft/dotnet-framework/
とはいえ、現時点で Hyper-V Containers を使った CI SaaS は無いみたいなので、大人しく LTSC 2016 を使うことになるのではないかと。実際に AWS CodeBuild がそうでした。
ちなみに ASP.NET を使うためのイメージはこれまでと同じ microsoft/aspnet
です。
.NET Core 向け
.NET Framework 向けは Windows しかなかったので分かりやすいですが、.NET Core は複数のディストリ向けに公開されているだけじゃなく、Nano Server のイメージもあるのでちょっと数が多いです。
しかし、ちょっと前から multi-arch なイメージに対応しているので、基本は以下の 3 つだけ知っておけば良いです。後は Docker が勝手に Ubuntu と Nano Server で切り替えてくれます。
- 2.1-sdk
- 2.1-aspnetcore-runtime
- 2.1-runtime
.NET Framework 向けとは異なり、ASP.NET Core 向けのイメージも microsoft/dotnet
に統合されるようになったので、今後は microsoft/aspnetcore
と microsoft/aspnetcore-build
は更新されません。
例を挙げると Docker を使った CI SaaS では microsoft/dotnet:2.1-sdk
を使い、ASP.NET Core を動かすための Dockerfile では microsoft/dotnet:2.1-aspnetcore-runtime
を使えば良いです。
特に理由がなければシンプルなタグを使っておけば良いですが、.NET Core に関しては Ubuntu のバージョン違いだけで数種類出ているうえに、Nano Server も 1709 / 1803 / LTSC 2016 が用意されています。
https://hub.docker.com/r/microsoft/dotnet/
更に .NET Core 2.1 からは Alpine Linux のイメージと ARM32 向けイメージも追加されているので、間違わないように注意したいところです。ちなみに Alpine は microsoft/dotnet:2.1-sdk-alpine
といった形で指定できます。基本的に OS 名は最後につきます。
Alpine Linux のイメージは今後主流になっていくのではないかと思っています。