Docker manifest



  • 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 😁, 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.