Comment transférer une image Docker d'une machine à une autre sans utiliser de référentiel, qu'il soit privé ou public?
Je crée ma propre image dans VirtualBox, et quand elle est terminée, j'essaie de déployer sur d'autres machines pour avoir une utilisation réelle.
Puisqu'il est basé sur ma propre image (comme Red Hat Linux), il ne peut pas être recréé à partir d'un Dockerfile. Mon dockerfile n'est pas facilement portable.
Y a-t-il des commandes simples que je peux utiliser? Ou une autre solution?
repo:tag
comme référence d'image plutôt queimage id
. Si vous utilisezimage id
, l'image chargée ne conservera pas la balise (et vous devrez effectuer une autre étape pour baliser l'image).docker images
, puis utilisezdocker tag DESIREDIMAGEID mycompany/myreponame
. Si votre ID d'image est 591de551d6e4, vous pouvez abréger l'ID d'image:docker tag 59 mycompany/myreponame
Transférer une image Docker via SSH, compresser le contenu à la volée:
C'est aussi une bonne idée de mettre
pv
au milieu du tuyau pour voir comment se passe le transfert:(Plus d'informations sur
pv
: page d'accueil , page de manuel ).la source
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
pour copier des images entre les machines mach1 et mach2 .eval $(docker-machine env dev)
est bon pour la communication générale avec un seul hôte Docker mais pas pour copier entre deux machines, car cela implique deux hôtes Docker / machines Docker différents.ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load
. Sans le commutateur "-t", sudo se plaint sudo: désolé, vous devez avoir un tty pour exécuter sudo ; avec un "-t" c'est le même message car ssh dit que le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal. et enfin, avec deux "-t", j'obtiens le contenu du fichier tar (ie l'image) sur mon terminal. Des idées?Pour enregistrer une image dans n'importe quel chemin de fichier ou emplacement NFS partagé, consultez l'exemple suivant.
Obtenez l'identifiant de l'image en faisant:
Supposons que vous ayez une image avec l'ID "matrice-données".
Enregistrez l'image avec l'identifiant:
Copiez l'image du chemin vers n'importe quel hôte. Maintenant, importez dans votre installation Docker locale en utilisant:
la source
Enregistrez d'abord l'image Docker dans un fichier zip:
Chargez ensuite l'image exportée dans Docker à l'aide de la commande ci-dessous:
la source
docker load < my-image.tar.gz
c'est suffisant. L'image est décompressée automatiquement pour gzip, bzip2 et xz.Courir
pour voir une liste des images sur l'hôte. Disons que vous avez une image appelée awesomesauce . Dans votre terminal,
cd
vers le répertoire dans lequel vous souhaitez exporter l'image. Maintenant, lancez:Copiez le fichier tar sur une clé USB ou autre, puis copiez-le sur le nouvel ordinateur hôte.
Maintenant, depuis le nouvel hôte, faites:
Maintenant, allez prendre un café et lisez Hacker News ...
la source
docker save [image] -o file.tar
etdocker load -i file.tar
pour éviter cela!docker save [image] -o file.tar
semble également être beaucoup plus rapidePour une exportation aplatie du système de fichiers d'un conteneur, utilisez;
docker export CONTAINER_ID > my_container.tar
Utilisez
cat my_container.tar | docker import -
pour importer ladite image.la source
cat my_container.tar | docker import - my_container:new
cas si vous importez localement selon l'aide de cmdLorsque vous utilisez docker-machine, vous pouvez copier des images entre des machines
mach1
etmach2
avec:Et bien sûr, vous pouvez également rester
pv
au milieu pour obtenir un indicateur de progression:Vous pouvez également omettre l'un des
docker-machine config
sous-shells pour utiliser votre docker-host par défaut actuel.pour copier l'image de l'hôte docker actuel vers
mach
ou
à copier depuis l'
mach
hôte docker actuel.la source
Je suppose que vous devez enregistrer
couchdb-cartridge
un ID d'image 7ebc8510bc2c:Enregistrez l'image archiveName dans un fichier tar. J'utiliserai le
/media/sf_docker_vm/
pour enregistrer l'image.Copiez le fichier archiveName.tar à votre nouvelle instance de Docker en utilisant quelles que soient les œuvres méthode dans votre environnement, par exemple
FTP
,SCP
etc.Exécutez la
docker load
commande sur votre nouvelle instance Docker et spécifiez l'emplacement du fichier tar d'image.Enfin, exécutez la
docker images
commande pour vérifier que l'image est désormais disponible.Veuillez trouver cet article détaillé .
la source
Pour transférer des images de votre installation Docker locale vers une machine virtuelle minikube:
la source
docker-push-ssh
est un utilitaire de ligne de commande que j'ai créé juste pour ce scénario.Il met en place un registre Docker privé temporaire sur le serveur, établit un tunnel SSH à partir de votre hôte local, pousse votre image, puis nettoie après lui-même.
L'avantage de cette approche
docker save
(au moment de la rédaction de la plupart des réponses utilise cette méthode) est que seules les nouvelles couches sont envoyées au serveur, ce qui entraîne un téléchargement beaucoup plus rapide.Souvent, l'utilisation d'un registre intermédiaire comme dockerhub est indésirable et lourde.
https://github.com/brthor/docker-push-ssh
Installer:
Exemple:
docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image
La plus grande mise en garde est que vous devez ajouter manuellement votre hôte local à la
insecure_registries
configuration de Docker . Exécutez l'outil une fois et il vous donnera une erreur informative:Où dois-je définir l'indicateur «--insecure-registry» sous Mac OS?
la source
Toutes les autres réponses sont très utiles. Je viens de traverser le même problème et de trouver un moyen facile de le faire
docker machine scp
.Depuis Docker Machine v0.3.0, scp a été introduit pour copier des fichiers d'une machine Docker vers une autre. Cela est très pratique si vous souhaitez copier un fichier de votre ordinateur local vers une machine Docker distante comme AWS EC2 ou Digital Ocean, car Docker Machine s'occupe des informations d'identification SSH pour vous.
Enregistrez vos images en utilisant
docker save
comme:Copier des images à l'aide de docker-machine scp
Supposons que votre machine Docker distante soit
remote-machine
et que le répertoire dans lequel vous voulez que le fichier tar soit/home/ubuntu
.Charger l'image Docker
la source
Je souhaite déplacer toutes les images avec des balises.
Explication:
OUT
Obtient d' abord toutes les balises mais séparées par de nouvelles lignes. La secondeOUTPUT
obtient toutes les balises d'un tableau. Troisième$(echo "${OUTPUT[*]}")
place toutes les balises pour une seuledocker save
commande afin que toutes les images soient dans un seul tar.De plus, cela peut être compressé à l'aide de gzip. Sur cible, exécutez:
-O
option pour mettre letar
contenu sur stdin qui peut être saisi pardocker load
.la source
Vous pouvez utiliser
sshfs
:la source
Script pour exécuter la fonction de sauvegarde et de chargement de Docker (testé et testé):
Docker Save:
Docker Load:
la source
Vous pouvez utiliser un one-liner avec
DOCKER_HOST
variable:la source