J'ai une image Docker que j'ai construite :
» docker images --no-trunc | grep discoball/nginx
discoball/nginx latest 623444f1777c 21 hours ago 126 MB
Je voudrais déplacer ça sur un serveur distant ; docker save
y docker load
semblent être des commandes capables de sérialiser et de désérialiser une image vers/depuis un fichier, ce qui devrait être exactement ce dont j'ai besoin. Cependant, je ne parviens pas à les faire fonctionner.
Je sauvegarde l'image :
» docker save discoball/nginx > nginx-latest.tar.gz
Essayez ensuite de le restaurer sur la télécommande :
» cat nginx-latest.tar.gz | ssh "$IP" docker load
Cette commande s'exécute avec succès. Cependant, docker images
sur la télécommande indique que l'image ne s'est pas rendue jusqu'au bout, mais que ce qui semble être une ancienne version est toujours présent :
» ssh "$IP" docker images --no-trunc | grep discoball/nginx
discoball/nginx latest 2678dc27dd46 21 hours ago 126 MB
Notez que l'ID de l'image est différent ; je suppose qu'il s'agit d'une ancienne version de mon image. La recherche de l'ID de l'image elle-même ne donne également aucun résultat sur le serveur :
» ssh "$IP" docker images --all | grep 623444
(last command returned 1.)
»
Qu'est-ce que je fais de mal ?
Donc maintenant, je creuse dans le généré .tar.gz
le fichier repositories
semble indiquer que la machine distante a raison :
» tar -xf nginx-latest.tar.gz -O repositories
{"discoball/nginx":{"latest":"2678dc27dd46469bc8692c2e5ad71b57ae573b1444531fcd1f76798638f84f5c"}}
C'est le numéro que je vois sur la télécommande. Mais pourquoi diable docker save
écrire ça, et non 623444f1777c
? (Les identifiants d'image docker ne sont-ils pas simplement des hachages cryptographiques de l'image et/ou de la couche ?). Si l'utilisateur distant fait ont la même image, pourquoi ont-ils un ID d'image différent ? (Je ne sais pas comment vérifier cela pour le moment, car jusqu'à présent, j'aurais dit que "même image" était "même ID d'image" )