¿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?
Creo mi propia imagen en VirtualBox, y cuando termina, trato de implementarla en otras máquinas para tener un uso real.
Como se basa en mi propia imagen basada (como Red Hat Linux), no se puede recrear desde un Dockerfile. Mi dockerfile no es fácilmente portátil.
¿Hay comandos simples que pueda usar? U otra solución?
repo:tag
como referencia de imagen en lugar deimage id
. Si lo usaimage id
, la imagen cargada no retendrá la etiqueta (y tendrá que hacer otro paso para etiquetar la imagen).docker images
, luego usedocker tag DESIREDIMAGEID mycompany/myreponame
. Si la identificación de su imagen es 591de551d6e4, puede abreviar la identificación de la imagen:docker tag 59 mycompany/myreponame
Transferencia de una imagen de Docker a través de SSH, bzip el contenido sobre la marcha:
También es una buena idea poner
pv
en el medio de la tubería para ver cómo va la transferencia:(Más información sobre
pv
: página de inicio , página de manual ).fuente
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
para copiar imágenes entre las máquinas mach1 y mach2 .eval $(docker-machine env dev)
es bueno para la comunicación general con un único host acoplable pero no para copiar entre dos máquinas, ya que esto implica dos hosts acoplables / máquinas acopladoras diferentes.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
. Sin el modificador "-t", sudo se queja de sudo: lo siento, debes tener un tty para ejecutar sudo ; con un "-t" es el mismo mensaje porque ssh dice que Pseudo-terminal no se asignará porque stdin no es un terminal. y finalmente, con dos "-t" s, obtengo el contenido del archivo tar (es decir, la imagen) en mi terminal. ¿Algunas ideas?Para guardar una imagen en cualquier ruta de archivo o lugar NFS compartido, consulte el siguiente ejemplo.
Obtenga la identificación de la imagen haciendo:
Digamos que tiene una imagen con id "datos de matriz".
Guarde la imagen con id:
Copie la imagen de la ruta a cualquier host. Ahora importe a su instalación local de Docker usando:
fuente
Primero guarde la imagen de Docker en un archivo zip:
Luego cargue la imagen exportada a Docker usando el siguiente comando:
fuente
docker load < my-image.tar.gz
es suficiente. La imagen se descomprime automáticamente para gzip, bzip2 y xz.correr
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:Copie el archivo tar en una memoria USB o lo que sea, y luego cópielo en la nueva computadora host.
Ahora desde el nuevo host hacer:
Ahora ve a tomar un café y lee Hacker News ...
fuente
docker save [image] -o file.tar
ydocker load -i file.tar
para evitar esto!docker save [image] -o file.tar
también parece ser mucho más rápidoPara una exportación aplanada del sistema de archivos de un contenedor, use;
docker export CONTAINER_ID > my_container.tar
Use
cat my_container.tar | docker import -
para importar dicha imagen.fuente
cat my_container.tar | docker import - my_container:new
si se importan localmente según la ayuda de cmdCuando use docker-machine, puede copiar imágenes entre máquinas
mach1
ymach2
con:Y, por supuesto, también puede quedarse
pv
en el medio para obtener un indicador de progreso:También puede omitir una de las
docker-machine config
subcapas, para usar su docker-host predeterminado actual.copiar la imagen del actual docker-host a
mach
o
copiar desde el
mach
docker-host actual.fuente
Supongo que necesita guardar,
couchdb-cartridge
que tiene una identificación de imagen de 7ebc8510bc2c:Guarde la imagen archiveName en un archivo tar. Usaré
/media/sf_docker_vm/
para guardar la imagen.Copiar el archivo archiveName.tar a la nueva instancia del estibador usando cualquier método que funcione en su entorno, por ejemplo
FTP
,SCP
, etc.Ejecute el
docker load
comando en su nueva instancia de Docker y especifique la ubicación del archivo tar de imagen.Finalmente, ejecute el
docker images
comando para verificar que la imagen ahora esté disponible.Encuentra esta publicación detallada .
fuente
Para transferir imágenes desde su instalación local de Docker a una máquina virtual de minikube:
fuente
docker-push-ssh
es una utilidad de línea de comandos que creé solo para este escenario.Configura 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
docker save
(al momento de escribir la mayoría de las respuestas está usando 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, usar un registro intermedio como dockerhub es indeseable y engorroso.
https://github.com/brthor/docker-push-ssh
Instalar en pc:
Ejemplo:
docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image
La mayor advertencia es que debe agregar manualmente su host local a la
insecure_registries
configuración de Docker . Ejecute la herramienta una vez y le dará un error informativo:¿Dónde debo configurar el indicador '--insecure-Registry' en Mac OS?
fuente
Todas las demás respuestas son muy útiles. Acabo de pasar por el mismo problema y descubro una manera fácil de hacerlo
docker machine scp
.Desde Docker Machine v0.3.0, scp se introdujo para copiar archivos de una máquina Docker a otra. Esto es muy conveniente si desea copiar un archivo de su computadora local a una máquina Docker remota como AWS EC2 o Digital Ocean porque Docker Machine se encarga de las credenciales SSH por usted.
Guarda tus imágenes usando
docker save
como:Copie imágenes usando docker-machine scp
Suponga que su máquina Docker remota es
remote-machine
y el directorio que desea que sea el archivo tar es/home/ubuntu
.Cargue la imagen de Docker
fuente
Quiero mover todas las imágenes con etiquetas.
Explicación:
Primero
OUT
obtiene todas las etiquetas pero separadas con nuevas líneas. SegundoOUTPUT
obtiene todas las etiquetas en una matriz. Third$(echo "${OUTPUT[*]}")
pone todas las etiquetas para un solodocker save
comando para que todas las imágenes estén en un solo alquitrán.Además, esto se puede comprimir usando gzip. En el objetivo, ejecute:
-O
opción paratar
poner contenidos en stdin que pueden ser tomados pordocker load
.fuente
Puedes usar
sshfs
:fuente
Script para realizar la función de guardar y cargar Docker (probado y probado):
Docker Save:
Carga Docker:
fuente
Puede usar un one-liner con
DOCKER_HOST
variable:fuente