Re : Installer un registry Docker privé et multiarch

Depuis cet article, docker intègre la gestion des manifests dans son cli. C’est expérimental mais bon… Ca fonctionne 🤘🏻

Configuration du cli

Il faut autoriser votre cli à utiliser les commandes expérimentales en rajoutant à votre config Docker (par exemple ~/.docker/config.json) :

{
    "experimental": "enabled"
}

Création du manifest

Si j’ai créé 2 images Docker nommées :

  • ${REGISTRY}/${NAME}-amd64-linux:latest
  • ${REGISTRY}/${NAME}-arm-linux:latest

alors :

$ docker manifest create ${REGISTRY}/${NAME}:latest ${REGISTRY}/${NAME}-amd64-linux:latest ${REGISTRY}/${NAME}-arm-linux:latest

Attention : la nom des images est important si vous souhaitez que Docker reconnaisse automatiquement l’OS et l’architecture de votre image ! Dans les faits, et peut-être parce que c’est expérimental :grin:, j’ai du annoter l’image pour lui forcer l’architecture :

$ docker manifest annotate ${REGISTRY}/${NAME}:latest ${REGISTRY}/${NAME}-arm-linux:latest --arch arm

Pour vous assurer que tout est ok, faites un inspect de votre image (avant le annote pour vérifier qu’il est toujours utile ?) :

$ docker manifest inspect ${REGISTRY}/${NAME}:latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 593,
         "digest": "sha256:b113",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 593,
         "digest": "sha256:6e50a",
         "platform": {
            "architecture": "arm",
            "os": "linux"
         }
      }
   ]
}

Publier sur le registry

C’est le plus simple :

$ docker manifest push ${REGISTRY}/${NAME}:latest

La doc officielle est ici.