2 votes

Comment copier une image Docker sur une machine distante ?

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" )

0voto

fraca7 Points 817

Sur votre machine locale

docker save MYIMAGE:TAG -o myimage.tgz

Copie myimage.tgz à la machine distante et, là, vous pouvez

docker load -i myimage.tgz

En fait, il serait plus facile de transférer la Dockerfile et ses artefacts et de construire directement une nouvelle image sur le serveur distant. Ce qui fonctionne le mieux pour vous.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X