.NET(Core)で利用可能なDockerイメージとタグ

# はじめに

Dockerfile のメンテナンスをしていて、あれ？このバージョンの.NET で利用可能なタグは何だっけか？を調べるためのメモです。

:::note warn
microsoft/dotnet から始まる.NET Core の古いリポジトリにある.NET Core 2.1 のイメージは利用できなくなっているので注意してください。.NET Core 2.1 のイメージは引き続きこの投稿にある mcr.microsoft.com から始まるリポジトリで提供されています。
:::
[.NET Core 2.1 container images will be deleted from Docker Hub](https://devblogs.microsoft.com/dotnet/net-core-2-1-container-images-will-be-deleted-from-docker-hub/)

# 利用可能な.NET(Core)のコンテナリポジトリ

.NET の Docker イメージは DockerHub から確認できます。
コンテナイメージは Microsoft の Docker リポジトリにホストされているので下記のリポジトリから Pull できます。

- [mcr.microsoft.com/dotnet/sdk](https://hub.docker.com/_/microsoft-dotnet-sdk/)
- [mcr.microsoft.com/dotnet/aspnet](https://hub.docker.com/_/microsoft-dotnet-aspnet/)
- [mcr.microsoft.com/dotnet/runtime](https://hub.docker.com/_/microsoft-dotnet-runtime/)

.NET Core はもともと下記のリポジトリで公開されていましたが、.NET5 で.NET Framework と.NET Core が統合されたため[コンテナリポジトリも変更](https://github.com/dotnet/dotnet-docker/issues/2375)されています。引き続き Pull できますが新しいコンテナイメージを作成する場合は使わない方が良いでしょう。

- [mcr.microsoft.com/dotnet/core/sdk](https://hub.docker.com/_/microsoft-dotnet-core-aspnet/)
- [mcr.microsoft.com/dotnet/core/aspnet](https://hub.docker.com/_/microsoft-dotnet-core-aspnet/)
- [mcr.microsoft.com/dotnet/core/runtime](https://hub.docker.com/_/microsoft-dotnet-core-runtime/)

# 利用可能なタグ、OS の種類

.NET(Core)のバージョンごとに利用できる OS のベースイメージは結構違いがあって、それぞれ下記のようなタグで公開されています。

- https://mcr.microsoft.com/v2/dotnet/sdk/tags/list
- https://mcr.microsoft.com/v2/dotnet/aspnet/tags/list
- https://mcr.microsoft.com/v2/dotnet/runtime/tags/list

公式では Alpine は最新(.NET 5)以外はだいぶ絞られていますね。
`mcr.microsoft.com/dotnet/sdk`で公開されているイメージの一覧を表にしたものです。

| OS   Version           | .NET Core 2.1    | .NET Core 3.1      | .NET 5             | .NET 6                 | .NET 7             | .NET 8              | .NET 9             |
|------------------------|------------------|--------------------|--------------------|------------------------|--------------------|---------------------|--------------------|
| Debian 9 (stretch)     | 2.1-stretch-slim | 　                 | 　                 | 　                     |                    |                     |                    |
| Debian 10 (buster)     | 　               | 3.1-buster-slim    | 5.0-buster-slim    | 　                     |                    |                     |                    |
| Debian 11 (bullseye)   | 　               | 3.1-bullseye       | 5.0-bullseye-slim  | ＊   6.0-bullseye-slim | 7.0-bullseye-slim  |                     |                    |
| Debian 12 (bookworm)   | 　               | 　                 | 　                 | ＊   6.0-bookworm-slim | 7.0-bookworm-slim  | ＊8.0-bookworm-slim | 9.0-bookworm-slim  |
| Alpine 3.11            | 　               | 　                 | 5.0-alpine3.11     | 　                     |                    |                     |                    |
| Alpine 3.12            | 2.1-alpine3.12   | 3.1-alpine3.12     | 5.0-alpine3.12     | 　                     |                    |                     |                    |
| Alpine 3.13            | 2.1-alpine3.13   | 3.1-alpine3.13     | 5.0-alpine3.13     | 6.0-alpine3.13         |                    |                     |                    |
| Alpine 3.14            | 　               | 3.1-alpine3.14     | 5.0-alpine3.14     | 6.0-alpine3.14         |                    |                     |                    |
| Alpine 3.15            | 　               | 3.1-alpine3.15     | 5.0-alpine3.15     | 6.0-alpine3.15         | 7.0-alpine3.15     |                     |                    |
| Alpine 3.16            | 　               | 　                 | 　                 | 6.0-alpine3.16         | 7.0-alpine3.16     |                     |                    |
| Alpine 3.17            | 　               | 　                 | 　                 | ＊   6.0-alpine3.17    | 7.0-alpine3.17     |                     |                    |
| Alpine 3.18            | 　               | 　                 | 　                 | ＊   6.0-alpine3.18    | 7.0-alpine3.18     | ＊8.0-alpine3.18    |                    |
| Alpine 3.19            | 　               | 　                 | 　                 | ＊   6.0-alpine3.19    | 7.0-alpine3.19     | ＊8.0-alpine3.19    | 9.0-alpine3.19     |
| Ubuntu 18.04 (bionic)  | 2.1-bionic       | 3.1-bionic         | 　                 | 　                     |                    |                     |                    |
| Ubuntu 20.04 (focal)   | 2.1-focal        | 3.1-focal          | 5.0-focal          | ＊   6.0-focal         |                    |                     |                    |
| Ubuntu 22.04 (jammy) | 　               | 　                 | 　                 | ＊   6.0-jammy         | 7.0-jammy          | ＊8.0-jammy         | ＊9.0-jammy          |
| Ubuntu 24.04 (Noble) |                  |                    |                    |                         |                    | ＊8.0-noble         | ＊9.0-noble          |
| cbl-mariner1.0         | 　               | 3.1-cbl-mariner1.0 | 5.0-cbl-mariner1.0 | 6.0-cbl-mariner1.0     | 　                 | 　                  |                    |
| cbl-mariner2.0         | 　               | 　                 | 　                 | 6.0-cbl-mariner2.0     | 7.0-cbl-mariner2.0 | 8.0-cbl-mariner2.0  | 9.0-cbl-mariner2.0 |

＊2024/04 現在公式サポートが有効なもの

また 5 以前であれば以前のリポジトリ(`mcr.microsoft.com/dotnet/core/sdk`)からも Pull できます。こちらは Alpine9 などの古いイメージも引き続き公開されているようです。

| OS Version        | .NET Core 2.1  | .NET Core 3.1  |
| ----------------- | -------------- | -------------- |
| Debian 9(stretch) | 2.1-stretch    |                |
| Debian 10(buster) |                | 3.1-buster     |
| Alpine 3.9        | 2.1-alpine3.9  |                |
| Alpine 3.10       | 2.1-alpine3.10 | 3.1-alpine3.10 |
| Alpine 3.11       | 2.1-alpine3.11 | 3.1-alpine3.11 |
| Alpine 3.12       | 2.1-alpine3.12 | 3.1-alpine3.12 |
| Ubuntu 18(bionic) | 2.1-bionic     | 3.1-bionic     |
| Ubuntu 20(focal)  | 2.1-focal      | 3.1-focal      |