Docker Desktop for Windowsでschema v1 manifestを見分ける

# Dockerバージョン
執筆時点では、Docker Desktop for Windowsの `Edge Release` (stableではないほう)にある [Docker Desktop Community 2.3.0.0](https://docs.docker.com/docker-for-windows/edge-release-notes/#docker-desktop-community-2300)を使っている。

※ [2.2.2.0](https://docs.docker.com/docker-for-windows/edge-release-notes/#docker-desktop-community-2220)の時点でWindows10 HomeでもDocker Desktop for Windowsが使えるようになった :tada: 

> Windows 10 Home users can now use Docker Desktop through the experimental WSL 2 support. This requires Windows Insider Preview Build 19018 or later.

Windows10側はInsider Previewのビルド19041。
ちゃんとWSL2からDockerを使えるように、Docker Desktop for Windowsの設定でResources WSL Integrationでは `Enable integration with additional distros`にチェックを入れている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201962/a099a129-0079-c971-a59a-953bae5c1d95.png)






# Dockerイメージがうまく動かない現象
DockerHubにある [MariaDB](https://hub.docker.com/_/mariadb)の `v10.0.17`と `v10.2.15`を使っていたが、どうも `v10.0.17`だけ挙動がおかしかった。ポート番号が割り当てられず、ログも吐かずにエラー状態となっている。

Volume, Imageを削除してDuckerHubからpullし直してみたが、変わらず。





# schema v1 manifest形式のイメージが怪しそう
イメージをpullした際に、こんなメッセージがコンソールに表示されていた。

> Image docker.io/library/mariadb:10.0.17 uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/

「もう古いschema1 manifest formatを使っているからschema2にアップグレードしてくれ」と言われているように見える。

そう言われましても。。。 (Insider Previewする前に使っていたDocker Desktop v2.2.2だと元気に動いていた)

manifestについての公式ドキュメントもちらと見たが、謎 (原因は `v1だから`だとは思うが。。。)

cf. https://docs.docker.com/registry/spec/manifest-v2-2/

ひとまず苦肉の策で、既にschema v2で書かれているMariaDBバージョンを使うことにした (たとえばv10.2.15は動くので)。

意図しないバージョンアップなので、既存のv10.0.17に一番近いバージョンにしたい。

しかし毎回イメージをpullして確認するのはしんどい。





# v2 formatをDocker CLIから見分けて選ぶ
pullしなくても見分けられそう。

Docker Desktop for Windowsの設定からCommand Line > `Enable experimental features`にチェックを入れ、CLIを使えるようにしておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201962/47dc32b5-4da0-efb9-24b0-5ab6323bb401.png)

docker manifestコマンドにinspectというコマンドがあり、manifest情報を調べられる。

cf. https://docs.docker.com/engine/reference/commandline/manifest/#manifest-inspect

schema v1のmanifestは `そもそも調べられずエラーを吐く`という反応を利用して、MariaDBのv10.0.19～v10.0.38を調べていった (やり口が汚い)

schema v1の場合はこう。サポートされていない、とエラーを吐く。

```powershell
> docker manifest inspect mariadb:10.0.24

unsupported manifest media type and no default available: application/vnd.docker.distribution.manifest.v1+prettyjws
```

schema v2の場合はこう。ちゃんと結果が返る。

```powershell
> docker manifest inspect mariadb:10.0.25

{
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
                "mediaType": "application/octet-stream",
                "size": 7222,
                "digest": "sha256:bb3fc12095a70be54f3eb873e6770e9b396e3149a91af863cfaa669c851ca171"
        },
        "layers": [
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 51352535,
                        "digest": "sha256:5c90d4a2d1a8dfffd05ff2dd659923f0ca2d843b5e45d030e17abbcd06a11b5b"
                },
                ... (長いので省略)
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 120,
                        "digest": "sha256:87e0c87d0ef1531bce04835a47418a657ee1692e1ab163cb7a49027fa6806734"
                }
        ]
}
```

どうやらschema v2形式のイメージはv10.0.25以降のようだった。Dockerも元気に動く。