GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Los contenedores Docker son generalmente instancias de aplicaciones efímeras que carecen de estado interno. Esa es la mejor forma de manejarlos que le permite detener o reiniciar sus contenedores en cualquier momento.

Sin embargo, a veces las modificaciones en el sistema de archivos de un contenedor son inevitables. Tal vez esté probando un software y desee volver a una instantánea para volver más tarde. Otro caso de uso podría ser situaciones en las que el software dentro de un contenedor dejó de funcionar y desea guardar una réplica que pueda depurar en el futuro.

Aquí se explica cómo crear una nueva imagen de Docker a partir de un contenedor existente. Entonces podrá iniciar otro contenedor de esa imagen que se completará con el sistema de archivos de la primera.

Contenedores de Confirmación

El docker commit El comando se usa para tomar un contenedor y producir una nueva imagen a partir de él. Funciona con contenedores detenidos o en ejecución.

La sintaxis básica es la siguiente:

docker commit example-container example-image:latest

Esto crea una imagen del contenedor llamado example-container . También puede identificar el contenedor por ID si lo prefiere. Ambas piezas de información están disponibles desde la salida de docker ps que enumera todos los contenedores en su host.

A la imagen resultante se le asigna la etiqueta dada como segundo parámetro del comando. Esta es example-image:latest en el ejemplo que se muestra arriba. Al igual que una operación normal de etiquetado de imágenes, la nueva imagen reemplazará la referencia de la etiqueta si ya existe.

Ahora puede usar su imagen para restaurar el sistema de archivos desde example-container en una nueva instancia de contenedor:

docker run -d example-image:latest

El contenido del sistema de archivos coincidirá con el example-container contenedor en el momento en que docker commit se ejecutó el comando Hay una advertencia importante:el contenido de los volúmenes montados no se incluirá, por lo que sus ubicaciones de montaje estarán vacías en la imagen del contenedor creado. Para ejecutar un nuevo contenedor con datos de volumen intactos, use -v marcar para volver a adjuntar los volúmenes del primer contenedor cuando inicie la segunda instancia con docker run .

Otro punto de conflicto digno de mención es cómo Docker maneja las confirmaciones de los contenedores en ejecución. En su mayor parte, esto debería funcionar sin problemas, pero por defecto pausa el contenedor de destino antes de que se cree la confirmación. Todos los procesos dentro del contenedor se suspenderán y luego se reanudarán una vez que se complete la creación de la imagen. Esto mejora la consistencia de los datos en la nueva imagen, pero deja el contenedor momentáneamente inaccesible. Puede deshabilitar este comportamiento incluyendo --pause false con su docker commit comando.

Agregar mensajes de confirmación

El docker commit El comando admite mensajes de confirmación de manera similar al software de control de versiones como Git. Agregar un mensaje cuando crea una imagen desde un contenedor le permite documentar qué ha cambiado y el motivo detrás de su confirmación.

Usa el --message o -m bandera para aplicar un mensaje de confirmación:

docker commit -m "Example commit" example-container example-image:latest

También puede agregar información de autoría con una bandera dedicada. Proporcione una cadena en el común First Name <[email protected]> formato al --author o -a bandera. Se guardará junto con el mensaje de confirmación.

docker commit -a "Example Author <[email protected]>" -m "Example commit" example-container example-image:latest

Los mensajes de confirmación se muestran cuando usa el docker history comando para ver las capas en una imagen. Aparecerán en el COMMENT columna en el extremo derecho.

Otra forma de acceder a esta información es usar docker inspect junto con grep para extraer valores de autoría y comentarios de la representación JSON de una imagen:

docker inspect <image-id> | grep 'Created|Author|Comment'

Esto mostrará los datos asociados con la capa superior de la imagen.

Cambio de instrucciones de Dockerfile

Confirmar una imagen le da la oportunidad de mutar algunas de sus instrucciones de Dockerfile. Puede anular los siguientes valores en su nueva imagen:

  • CMD
  • ENTRYPOINT
  • ENV
  • EXPOSE
  • LABEL
  • ONBUILD
  • USER
  • VOLUME
  • WORKDIR

Para establecer una instrucción, use el --change o -c bandera:

docker commit --change 'ENTRYPOINT ["sh"]' example-container example-image:latest

Puede repetir la bandera tantas veces como sea necesario para aplicar todos los cambios previstos.

Solo se admiten las instrucciones que afectan a la capa superior del sistema de archivos. No puede extender sin problemas una imagen confirmada con nuevas capas a través de instrucciones como RUN y COPY . Sin embargo, puede tomar el resultado de una confirmación y escribir un nuevo Dockerfile que agregue contenido nuevo si es necesario:

# Created via `docker commit`
FROM example-image:latest
RUN apt install example-package

Si cambia las instrucciones de Dockerfile en el momento de la confirmación, vale la pena agregar un mensaje de confirmación que explique qué está modificando y por qué. Esto ayudará a cualquier otra persona con acceso a la imagen a comprender cualquier diferencia de comportamiento en comparación con el contenedor desde el que se creó.

Resumen

Las imágenes de Docker generalmente se crean a partir de Dockerfiles y se usan para iniciar contenedores desechables. Los cambios en el estado del sistema de archivos de un contenedor se realizan reconstruyendo la imagen, destruyendo el contenedor existente e iniciando uno nuevo. En un mundo ideal, los contenedores no tienen ningún estado interno, pero esto no siempre es así en la práctica.

Confirmar un contenedor le brinda una forma de restaurar su sistema de archivos actual en el futuro. Las confirmaciones son útiles para crear réplicas de contenedores problemáticos para que pueda depurar en un entorno separado mientras mantiene el acceso a registros y archivos temporales generados previamente.

Aunque las confirmaciones de contenedores a menudo se parecen a las instantáneas de VM, no son exactamente lo mismo. Las máquinas virtuales controlan el hardware virtual y el estado de ese hardware estará presente en la instantánea. Los contenedores Docker son solo un conjunto de procesos que se ejecutan en el host; una confirmación es una nueva imagen de Docker que representa el sistema de archivos del contenedor pero necesariamente carece de datos sobre el estado de los procesos, el kernel y su hardware.


Docker
  1. Cómo crear, enumerar y eliminar contenedores Docker en Linux

  2. ¿Extraer archivo de la imagen de Docker?

  3. Cómo crear una imagen personalizada desde un contenedor Docker

  4. Cómo crear una imagen de Docker a partir de un contenedor y un archivo Docker

  5. Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

Cómo verificar si el demonio Docker o un contenedor se está ejecutando

Cómo inspeccionar el contenido de una imagen Docker sin iniciar un contenedor

Cómo crear un contenedor de aplicaciones Django Docker

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

Cómo usar Docker Commit para cambiar imágenes de contenedores

Cómo crear una imagen Docker personalizada con Dockerfile