hub - Cómo copiar imágenes de Docker de un host a otro sin usar un repositorio
crear imagen docker (15)
Así es como puede mover imágenes de Docker entre dos registros / repositorios remotos. Funciona con Docker versión 1.10.2, compilación c3959b1.
docker pull source-registry.com/myProject/myImageName:1.0.0
docker tag source-registry.com/myProject/myImageName:1.0.0 target-remote-registry.com/myProject/myImageName:1.0.0
docker push target-remote-registry.com/myProject/myImageName:1.0.0
Es un método útil si desea migrar sus imágenes a un servicio de AWS ECS / ECR.
¿Cómo transfiero una imagen de Docker de una máquina a otra sin usar un repositorio, sin importar si es privado o público?
Estoy acostumbrado a jugar y crear mi propia imagen en VirtualBox, y cuando termina, intento desplegarla en otras máquinas para tener un uso real.
Dado que se basa en una imagen basada propia (como Red Hat Linux), no se puede volver a crear desde un Dockerfile.
¿Hay comandos simples que pueda usar? ¿O otra solución?
Parece que guardar / exportar puede lograr un propósito similar, vea ¿Cuál es la diferencia entre guardar y exportar en Docker? , y prefiero el comando save
para mi caso.
Creo que la mejor variante sería iniciar sesión en Docker Hub y empujar la imagen allí.
La primera parte del nombre de su imagen (antes de la barra inclinada) debe corresponder a su apodo en Docker Hub, la segunda parte es el nombre de la aplicación que desea y es más que la etiqueta (versión).
Resultado: brilliance643 / nagios: finalv
Resultado: Podrás acceder a tu imagen solo con
$docker run -ti -d brilliance643/nagios:finalv
Desde cualquier parte del universo.
Cuando se utiliza docker-machine, puede hacer docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load
docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load
para copiar imágenes entre las máquinas mach1
y mach2
.
Y, por supuesto, también puede pegar pv
en el medio para obtener un indicador de progreso:
docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load
docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load
.
También puede omitir uno de los sub-shells de docker-machine config
, para usar su actual docker-host predeterminado.
docker save <image> | docker $(docker-machine config <mach>) load
docker save <image> | docker $(docker-machine config <mach>) load
para copiar la imagen del actual docker-host a mach
o
docker $(docker-machine config <mach>) save <image> | docker load
docker $(docker-machine config <mach>) save <image> | docker load
para copiar desde la mach
a la actual ventana acoplable-host.
Deberá guardar la imagen de Docker como un archivo tar:
docker save -o <path for generated tar file> <image name>
Luego copie su imagen en un nuevo sistema con herramientas de transferencia de archivos regulares como cp
o scp
. Después de eso tendrás que cargar la imagen en Docker:
docker load -i <path to image tar file>
PS: Es posible que necesite sudo
todos los comandos.
Para guardar una imagen en cualquier ruta de archivo o lugar NFS compartido, consulte el siguiente ejemplo.
Obtener la identificación de la imagen haciendo:
sudo docker images
Digamos que tienes una imagen con id "datos-matriz".
Guarda la imagen con id:
sudo docker save -o /home/matrix/matrix-data.tar matrix-data
Copia la imagen de la ruta a cualquier host. Ahora importe a su instalación local de Docker usando:
sudo docker load -i <path to copied image file>
Para transferir imágenes de su instalación local de Docker a una máquina virtual de minikube:
docker save <image> | (eval $(minikube docker-env) && docker load)
Para una exportación aplanada del sistema de archivos de un contenedor, use;
docker export CONTAINER_ID > my_container.tar
Utilice el cat my_container.tar | docker import -
cat my_container.tar | docker import -
para importar dicha imagen.
Primero guarda la imagen de Docker en un archivo zip:
docker save <docker image name> | gzip > <docker image name>.tar.gz
Luego, cargue la imagen exportada a Docker usando el siguiente comando:
zcat <docker image name>.tar.gz | docker load
Puedes usar sshfs
:
$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
Quiero mover todas las imágenes con etiquetas.
```
OUT=$(docker images --format ''{{.Repository}}:{{.Tag}}'')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
```
Explicación:
First OUT
obtiene todas las etiquetas pero separadas con nuevas líneas. Second OUTPUT
obtiene todas las etiquetas en una matriz El tercer $(echo "${OUTPUT[*]}")
coloca todas las etiquetas para un solo comando de docker save
modo que todas las imágenes estén en un solo tar.
Además, esto puede ser comprimido usando gzip. En el objetivo, ejecute:
tar xvf images.tar.gz -O | docker load
-O
opción de tar
pone contenido en la entrada estándar que puede ser capturada por la docker load
.
Supongo que necesita guardar el couchdb-cartridge
que tiene un ID de imagen de 7ebc8510bc2c:
stratos@Dev-PC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
192.168.57.30:5042/couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
ubuntu 14.04 53bf7a53e890 3 days ago 221.3 MB
Guarde la imagen de archiveName en un archivo tar. /media/sf_docker_vm/
el /media/sf_docker_vm/
para guardar la imagen.
stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar
Copie el archivo archiveName.tar en su nueva instancia de Docker utilizando cualquier método que funcione en su entorno, por ejemplo, FTP
, SCP
, etc.
Ejecute el comando docker load
en su nueva instancia de Docker y especifique la ubicación del archivo tar de la imagen.
stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar
Finalmente, ejecute el comando de docker images
la docker images
para verificar que la imagen ahora esté disponible.
stratos@Dev-PC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB
192.168.57.30:5042/couchdb-cartridge latest bc8510bc2c 17 hours ago 1.102 GB
ubuntu 14.04 4d2eab1c0b9a 3 days ago 221.3 MB
Por favor encuentre este post detallado .
Todas las otras respuestas son muy útiles. Acabo de pasar por el mismo problema y descubro una manera fácil con el docker machine scp
.
Desde Docker Machine v0.3.0, se introdujo scp para copiar archivos de una máquina Docker a otra. Esto es muy conveniente si desea copiar un archivo desde su computadora local a una máquina Docker remota como AWS EC2 o Digital Ocean porque Docker Machine se hace cargo de las credenciales de SSH por usted.
Guarda tus imágenes usando la
docker save
como:docker save -o docker-images.tar app-web
Copia imagenes usando docker-machine scp
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
Suponga que su máquina Docker remota es una máquina remote-machine
y el directorio en el que desea que esté el archivo tar es /home/ubuntu
.
Cargar la imagen de Docker.
docker-machine ssh remote-machine sudo docker load -i docker-images.tar
Transfiriendo una imagen de Docker a través de SSH, bzipping el contenido sobre la marcha:
docker save <image> | bzip2 | /
ssh user@host ''bunzip2 | docker load''
También es una buena idea poner pv
en el centro de la tubería para ver cómo va la transferencia:
docker save <image> | bzip2 | pv | /
ssh user@host ''bunzip2 | docker load''
(Más información sobre pv
: página de inicio , página de manual ).
correr
docker images
para ver una lista de las imágenes en el host. Digamos que tienes una imagen llamada awesomesauce . En su terminal, cd
al directorio donde desea exportar la imagen. Ahora ejecuta:
docker save awesomesauce:latest > awesomesauce.tar
Copie el archivo tar en una unidad de disco USB o lo que sea, y luego cópielo en la nueva computadora host.
Ahora desde el nuevo host haz:
docker load < awesomesauce.tar
Ahora ve a tomar un café y lee Hacker News ...
docker-push-ssh
es una utilidad de línea de comandos solo para este escenario.
Establece un registro Docker privado temporal en el servidor, establece un túnel SSH desde su host local, empuja su imagen y luego se limpia después de sí mismo.
El beneficio de este enfoque sobre el docker save
(en el momento de escribir la mayoría de las respuestas que utilizan este método) es que solo las nuevas capas se envían al servidor, lo que resulta en una carga MUCHO más rápida.
A menudo, el uso de un registro intermedio como dockerhub es indeseable y engorroso.
https://github.com/coherenceapi/docker-push-ssh
Instalar:
pip install docker-push-ssh
Ejemplo:
docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image
La mayor advertencia es que tiene que agregar manualmente su host local a la configuración insegure_registries de Docker. Ejecute la herramienta una vez y le dará un error informativo:
Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): https://.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os
¿Dónde debo configurar el indicador ''--insecure-registry'' en Mac OS?