Estoy jugando con Docker durante un par de días y ya hice algunas imágenes (¡lo cual fue muy divertido!). Ahora quiero persistir en mi trabajo y llegué a los comandos save
y export
, pero no los entiendo completamente.
¿Cuál es la diferencia entre save
y export
en Docker?
Respuestas:
La respuesta corta es:
save
buscará una imagen: para una máquina virtual o un servidor físico, esa sería la imagen o el disco de instalación .ISO. El sistema operativo base.Empaquetará las capas y metadatos de toda la cadena requerida para construir la imagen. Luego puede cargar esta cadena de imágenes "guardadas" en otra instancia de acoplador y crear contenedores a partir de estas imágenes.
export
buscará todo el contenedor: como una instantánea de una VM normal. Guarda el sistema operativo, por supuesto, pero también cualquier cambio que haya realizado, cualquier archivo de datos escrito durante la vida útil del contenedor. Este es más como una copia de seguridad tradicional.Le dará un archivo .tar plano que contiene el sistema de archivos de su contenedor.
Editar: como mi explicación aún puede generar confusión, creo que es importante comprender que uno de estos comandos funciona con contenedores, mientras que el otro funciona con imágenes.
Una imagen debe ser considerada como 'muerta' o inmutable, comenzando 0 o 1000 contenedores desde ella no alterará un solo byte. Es por eso que hice una comparación con un sistema ISO de instalación anterior. Quizás esté aún más cerca de un CD en vivo.
Un contenedor "inicia" la imagen y agrega una capa adicional encima. Esta capa almacena cualquier cambio en el contenedor (archivos creados / modificados / eliminados ...).
fuente
docker commit
). Entonces puedosave
la imagen. O puedoexport
el contenedor directamente. ¿Y ambas formas (save
la imagen yexport
el contenedor) tendrán el mismo resultado?export
le dará un archivo .tar plano que contiene su sistema de archivos contenedor.save
empacará las capas y metadatos de toda la cadena requerida para construir la imagen. Luego puede cargar esta "saved
" cadena de imágenes en otra instancia de acoplador y crear contenedores a partir de estas imágenes.export
función.export
todos los metadatos se perderán, por lo que en caso de que intente ejecutar el contenedor con esa imagen, tendrá que mencionar el CMD y otros metadatos.save
funcionó bien para mí, pero exportar fue dolorosoHay dos diferencias principales entre
save
y losexport
comandos.save
El comando guarda la imagen completa con el historial y los metadatos, peroexport
exporta solo la estructura de los archivos (sin historial ni metadatos). Por lo tanto, el archivo tar exportado será más pequeño que el guardado.Cuando se utiliza el sistema de archivos exportado para la creación de una nueva imagen a continuación, esta nueva imagen no contendrá ninguna
USER
,EXPOSE
,RUN
etc. comandos de su Dockerfile. Solo se transferirá la estructura del archivo. Entonces, cuando usa las palabras clave mencionadas en su Dockerfile, no puede usar el comando de exportación para transferir imágenes a otra máquina; siempre debe usar el comando guardar.fuente
La imagen exportada no tendrá ninguna información de capa o historial guardada, por lo que será más pequeña y no podrá revertirla.
La imagen guardada voluntad información de capa e historial, por lo que es más grande.
Si le da esto a un cliente, la Q es ¿quiere mantener esas capas o no?
fuente
Técnicamente, guardar / cargar funciona con repositorios que pueden ser una o más imágenes, también conocidas como capas. Una imagen es una sola capa dentro de un repositorio. Finalmente, un contenedor es una imagen instanciada (en ejecución o no).
fuente
Docker save Produce un repositorio de archivos tar que contiene todas las capas principales y todas las etiquetas + versiones, o repo especificado: tag, para cada argumento proporcionado por la imagen .
Exportación de Docker Produce un archivo especificado (puede ser tar o tgz) con contenido plano sin contenido de volúmenes especificados del Contenedor .
cargador de muelle Guardar necesidad de utilizar una imagen cargador de muelle mientras cargador de muelle de exportación necesidad de utilizar el recipiente (al igual que se ejecuta en la)
Guardar uso
Uso de exportación
fuente
export
:container (filesystem)
->image tar
.import
:exported image tar
->image
. Solo una capa.save
:image
->image tar
.load
:saved image tar
->image
. Todas las capas serán recuperadas.De Docker en acción, segunda edición p190.
fuente