Вы когда-нибудь задумывались почему
docker pull python работает и на amd64 и на arm? И даже на прости господи, s390x? Я когда-то об этом читал, но никогда не делал для своих образов. Я недавно наткнулся на KEP-4216: Image pull per runtime class и подумал что будет интересно об этом рассказать.
В целом все просто. К образу прикладывается манифест, в котором указана платформа и какой конечный образ надо стянуть для этой платформы.
Посмотреть легко:
docker manifest inspect python
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:49f4118027f9494ebe47d3d9b6c7a46b6d7454a19a7ba42eca32734d8108b323",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:089081c12425406b89f78493e32ae5672d442ed426b3965fc8cffe17992947f4",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v5"
}
},
Сделать тоже в принципе не сложно.