run - ¿Cuál es la diferencia entre importar y cargar en Docker?
docker run image (3)
Entiendo la diferencia entre
export
(para contenedores) y
save
(para imágenes).
Pero al final del día, el tarball producido por guardar o exportar debe usarse como
una imagen
.
Entonces, ¿por qué hay 2 comandos para hacer una imagen de un tarball?
Como novato en Docker, aprendí esta diferencia por las malas .
-
En un sistema:
docker run -it myImage /bin/bash
-> Funciona bien
-
En ese mismo sistema:
docker **save** myImage -o myImage.tar
-
En el segundo sistema:
docker **import** myImage.tar
-> Funciona bien, sin problemas, solo se requiere etiqueta:
docker tag _the_assigned_tag myImage
-
En ese segundo sistema:
docker run -it myImage /bin/bash
docker: Respuesta de error del daemon: error de creación de tiempo de ejecución OCI: container_linux.go: 345: el proceso de inicio del contenedor provocó "exec: /" / bin / bash / ": stat / bin / bash: no existe dicho archivo o directorio": desconocido .
La búsqueda de ese error me llevó a todo tipo de razones, como
MountFlags="slave"
, pero la verdadera razón resultó ser la que se describe en esta publicación: debería haber usado load en lugar de import.
Sin saber lo que estaba pasando, el mensaje de error de Docker no me encaminó en ningún sentido hacia la causa de "importación", hasta que me topé con esta publicación.
docker save
producirá un tarball,
pero
con todas las capas principales y todas las etiquetas + versiones.
docker export
también produce un tarball, pero sin ninguna capa / historial.
A menudo se usa cuando uno quiere "aplanar" una imagen , como se ilustra en " Acoplar una imagen o contenedor Docker " de Thomas Uhrig :
docker export <CONTAINER ID> | docker import - some-image-name:latest
Sin embargo, una vez que se producen esos tarballs, carga / importación están ahí para:
-
docker import
crea una imagen de un tarball que ni siquiera es una imagen (solo un sistema de archivos que desea importar como imagen)
Cree una imagen de sistema de archivos vacía e importe el contenido del tarball
-
docker load
crea potencialmente múltiples imágenes desde un repositorio alquitranado (ya quedocker save
puede guardar múltiples imágenes en un tarball).
Carga un repositorio tarrado desde un archivo o la secuencia de entrada estándar
la importación de Docker se usa principalmente con un tarball que se crea a partir del contenedor en ejecución. Por ej. docker export containerID> /home/cntr.tar luego importe este tarball a una imagen Ej. docker import /home/cntr.tar mynewimage: etiqueta
Mientras que docker load se usa para cargar la imagen desde un tarball creado a partir de otra imagen. Por ej. docker save> /home/fromimg.tar y luego vuelva a cargarlo con docker load </home/fromimg.tar
La principal diferencia a pesar de que Docker guardar / cargar con imagen conserva el historial de la imagen. Mientras que la exportación / importación de Docker con contenedor aplana la imagen al eliminar todo el historial del contenedor.