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

¿Dónde se almacenan las imágenes y los contenedores de Docker en el host?

Docker utiliza dos tipos de formatos para representar procesos en ejecución:imágenes y contenedores, y ambos almacenan datos en el disco de su computadora. Hablaremos sobre los comandos que proporciona Docker para manejar datos y cómo puede usarlos para acceder a archivos de imágenes y contenedores.

La diferencia entre imágenes y contenedores

Las imágenes son lo que creas cuando ejecutas docker build; se almacenan en un registro de contenedor como Docker Hub y contienen todos los archivos y el código para ejecutar una aplicación. Puede pensar en ellos como archivos ISO para un sistema operativo de máquina virtual.

Los contenedores se crean a partir de imágenes y son como la máquina virtual real que ejecuta la aplicación. Es posible que tenga varios contenedores ejecutándose en paralelo a partir de la misma imagen. Cada contenedor tendrá su propio sistema de archivos, creado opcionalmente con "montajes de volumen" que vinculan datos del host al contenedor.

Trabajar con el almacenamiento de imágenes de Docker

Las imágenes almacenan todo el contenido de la imagen en su disco. Cada vez que extrae una imagen de Internet, se descarga y almacena, generalmente para siempre. Las imágenes pueden ser muy grandes, por lo que pueden acumularse con el tiempo, especialmente en el caso de portátiles con almacenamiento limitado.

Si desea acceder a los datos de la imagen directamente, generalmente se almacenan en las siguientes ubicaciones:

  • Linux:/var/lib/docker/
  • Windows:C:ProgramDataDockerDesktop
  • macOS:~/Library/Containers/com.docker.docker/Data/vms/0/

Sin embargo, tocar estos datos probablemente sea una mala idea. . El almacenamiento de Docker es complicado y, en realidad, varía enormemente según el controlador de almacenamiento que esté utilizando. Linux ahora tiene por defecto overlay2 en la mayoría de las distribuciones, que ni siquiera es accesible para la mayoría de los usuarios finales. Jugar con esto puede conducir a la pérdida de datos.

En cambio, Docker proporciona comandos administrados para manejar imágenes. Puede ver todas las versiones de las imágenes descargadas con un simple comando:

docker image ls

Afortunadamente, no es tan malo como parece, ya que las imágenes de Docker almacenan versiones de forma incremental. Eso significa que cada vez que descarga una nueva versión, solo reemplaza las partes que se cambiaron. Si usa con frecuencia la misma imagen una y otra vez, es probable que no acumule demasiados costos de almacenamiento.

Sin embargo, si usa muchas imágenes diferentes, es posible que tenga muchas imágenes guardadas que ya no se usan. Para limpiarlos, Docker proporciona un comando integrado para ejecutar la recolección de elementos no utilizados. Esto eliminará todas las imágenes que no tengan referencias, es decir, que no estén etiquetadas o referenciadas por ningún contenedor.

docker image prune

Para eliminar todas las imágenes antiguas no utilizadas por los contenedores existentes, ejecútelo con -a bandera:

docker image prune -a

Eso cubre el caso de uso principal, pero hay algunos comandos más útiles:

  • inspect :muestra información sobre la versión de un contenedor.
  • save & load :guarda y carga imágenes en un tar archivo.
  • rm :elimina una imagen directamente.
  • pull/push :actualizaciones desde un registro remoto.
  • history :proporciona un registro de cambios.

Trabajar con almacenamiento de contenedores Docker

Puede ver toda la información sobre un contenedor con docker inspect , que muestra los controladores y los datos del sistema de archivos, así como todos los montajes y volúmenes existentes.

docker inspect containerID

Los contenedores almacenan datos de dos maneras. Primero está el sistema de archivos base, que se copia de la imagen y es único para cada contenedor. Docker usa un "directorio inferior" y un "directorio superior", que son capas separadas que se fusionan en un sistema de archivos híbrido. El directorio inferior almacena los datos de la imagen base y el directorio superior almacena todo lo que se modificó durante el tiempo de ejecución, como los archivos de registro. En cualquier caso, el almacenamiento de estos depende del controlador del sistema de archivos que Docker esté configurado para usar.

Luego, hay monturas , que vinculan directorios desde el host al contenedor, generalmente administrados automáticamente con una función de Docker llamada volúmenes. Estos se almacenan normalmente y son accesibles para los usuarios finales. Si está realizando algún trabajo que requiera que modifique datos en contenedores en ejecución, probablemente debería modificar un volumen o un montaje de enlace.

Acceso a volúmenes

Se puede acceder directamente a los montajes de enlace y son una excelente opción si desea almacenar la configuración que se usa para muchos contenedores o almacenar datos accesibles que persisten a través de los reinicios del contenedor.

Si desea modificar los datos almacenados en volúmenes, también puede hacerlo. Se almacenan en un formato estándar accesible desde Linux:

/var/lib/docker/volumes/volumeID/_data

Puede obtener el ID del volumen y la información con docker volume inspect .

Al igual que las imágenes, los volúmenes también pueden volverse obsoletos. Puede eliminarlos fácilmente, pero hacer una copia de seguridad y transferirlos es un proceso más complicado.

docker volume prune

docker volume rm volumeID

Modificación del sistema de archivos de un contenedor Docker

Si desea modificar el sistema de archivos del contenedor, al igual que las imágenes, esta es una mala idea. En la mayoría de los casos, debe crear una nueva versión del contenedor con los cambios actualizados e implementar una actualización.

Sin embargo, si desea realizar algunos cambios rápidos sin detener el contenedor, la mejor manera es simplemente abrir un bash shell dentro del contenedor y modificarlo a través de Docker. Hacerlo es muy fácil:ejecute docker exec en el contenedor y pase "bash" como el comando:

docker exec -it container bash

Desde aquí, puede usar los comandos normales de Linux. Si desea hacer esto de forma remota, puede instalar un servidor SSH en su contenedor y vincular el puerto 22 a otro puerto en el host.

RELACIONADO: Cómo usar SSH en un contenedor Docker


Docker
  1. Aloja varios sitios web en contenedores Docker

  2. ¿Dónde se almacenan los archivos de traducción?

  3. Cómo usar imágenes, contenedores y archivos Docker en profundidad

  4. La diferencia entre CMD y ENTRYPOINT en Docker Images

  5. ¿Dónde se almacenan las imágenes, los contenedores y los volúmenes de Docker en el sistema host de Linux?

Cómo analizar y explorar el contenido de las imágenes de Docker

Cómo obtener la dirección IP de un contenedor Docker desde el host

Cómo actualizar las imágenes de Docker a la última versión

Trabajar con imágenes de Docker desde la línea de comandos

Trabajar con Docker Containers desde la línea de comandos

Guía para principiantes del mundo Docker