Docker Desktop で Docker Image Format v1 and Docker Image manifest version 2,  schema 1 support is disabled by default

## 前提

Docker Desktop for Mac
Mac Book Pro M1MAX

## 経緯

プロジェクトBの docker image build を繰り返していたら、容量不足でエラーになった。
未使用のイメージ等を一気に削除したら、プロジェクトAのイメージも当然 削除された。
プロジェクトAの `docker compose up -d` をかけたらイメージの構築からスタートし、
エラーが出た。

エラーになったのは [MySQL5.5.41のイメージ](https://hub.docker.com/layers/library/mysql/5.5.41/images/sha256-39627435dde39f8a4d01496baa154d9f644627d8e7b9aab15bde2f3e7885ca7b?context=explore) （2015年11月14日）

## Docker Desktop 公式

https://docs.docker.com/docker-for-mac/release-notes/

[Docker Desktop](https://docs.docker.com/desktop/release-notes/)


## 最新版

Version 4.29.0
Docker version 26.0.0, build 2ae903e

## エラー

```
[DEPRECATION NOTICE] Docker Image Format v1 and Docker Image manifest version 2,
 schema 1 support is disabled by default and will be removed in an upcoming release.
Suggest the author of docker.io/library/mysql:5.5.41 to upgrade the image to
 the OCI Format or Docker Image manifest v2, schema 2.
More information at https://docs.docker.com/go/deprecated-image-specs/
```

「イメージv1 と イメージ v2.1（意訳） は無効になりました。イメージ作成者に v2.2 にイメージフォーマットをアップグレードするように提案してください」 的なことが書いてあるようです。
オプションとかで回避とかそういう話ではない模様。

## バージョンダウンの方法

こちらを参照。

[Docker for Macの旧バージョンをインストールする](https://qiita.com/A-Kira/items/8ae66838b019683704d1)

起動しているコンテナを停止し、Docker Desktopをシャットダウン。
ダウンロードしたイメージを展開してインストール。Docker Desktop を起動。
そして `docker compose up -d` 。

## どこまでバージョンダウンすれば動くのか調べた

| Version | Date | Result|
|:-:|:-:|:-:|
| 4.24.0 | 2023-09-28 | |
| 4.25.0 | 2023-10-26 | ⭕ |
| 4.28.0 | 2024-02-26 | ⭕ |
| 4.29.0 | 2024-04-08 | ❌ |

4.24.0 に「Implemented pulling legacy schema1 images.」と記述があり、この次のバージョンから利用不可になったのかな？と思いましたが、実際には2024年4月現在の最新版「4.29.0」の一つ前の「4.28.0」で動作しました。

## どのMySQLバージョンから動くか調べた

MySQL5.5系は動かない、MySQL5.6系は動くとかかと思ったが、
リリース時期が2016年3月以前は動かない、2016年5月以降は動く、という感じらしい。

`Result` は、　`docker manifest inspect mysql:x.y.z` でJSONが返ってきたら⭕、返って来なかったら❌。
`Docker` は、そのバージョンのイメージを指定してビルドができれば⭕、エラーが出たら❌。
`docker manifest inspect` の結果と、Docker Desktopで利用できるかどうかは一致するようだ。

| Version | ReleaseDate | digest | Result | Docker |
|:-:|:-:|:-:|:-:|:-:|
| 5.5.41 | 2014-11-28| | ❌ |
| 5.5.46 | | | ❌ |
| 5.5.49 | 2016-02-26 | | ❌ | ❌ |
| 5.5.50 | 2016-05-16 | 385c5c57 | ⭕ | ⭕ |
| 5.5.51 | | 51ae120c | ⭕ |
| 5.5.62 | **2018-08-20** | c9c671d0 | ⭕ |
| 5.5 | | c9c671d0 | ⭕ |
| 5.6.17 | | | ❌ |
| 5.6.30 | 2016-03-04 | | ❌ | ❌ |
| 5.6.31 | 2016-05-16 | 01bbb21c | ⭕ | ⭕ |
| 5.6.51 | **2021-01-05** | 897086d0 | ⭕ |
| 5.6 | | 897086d0 | ⭕ |
| 5.7.12 | 2016-03-29| | ❌ | ❌ |
| 5.7.13 | 2016-05-25 | 1195b21c | ⭕ | ⭕ |
| 5.7.44 | **2023-09-21** | dab0a802 | ⭕ |
| 5.7 | | b46f7aa9 | ⭕ |
| 5 | | b46f7aa9 | ⭕ |

## 回避法・1

https://docs.docker.com/engine/deprecated/#pushing-and-pulling-with-image-manifest-v2-schema-1

`DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE` を空でない値に設定すると回避できるそうですが、次のバージョンでこの設定はなくなるそうです :D~

## 回避法・2

https://matsuand.github.io/docs.docker.jp.onthefly/registry/spec/deprecated-schema-v1/

```
docker pull する
docker push する
```

自動的にschema2になる模様。

## メモ

### compose.yaml はいつから？

compose.yaml(yml)が使われるようになったのは、[Docker Compose v1.28.6](https://github.com/docker/compose/releases/tag/1.28.6) 2021/03/23 から。

- Miscellaneous
    - Add **compose.yml** and compose.yaml to default filename list

2021年3月からなんですね。もう3年か……