GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué hay dentro de una imagen/contenedor de Docker?

Puede ser útil distinguir entre imágenes y contenedores (docs). Una imagen es estático y vive solo en el disco. Un contenedor es una instancia en ejecución de una imagen e incluye su propio árbol de procesos, así como RAM y otros recursos de tiempo de ejecución.

Una imagen es una agrupación lógica de capas más metadatos sobre qué hacer al crear un contenedor y cómo ensamblar las capas. Parte de esos metadatos es que cada capa conoce la ID de su padre.

Entonces, ¿qué entra en una capa? Los archivos (y directorios) que ha agregado al padre. También hay archivos especiales ("borrado") que indican que se eliminó algo del padre.

Cuando docker run una imagen, docker crea un contenedor:desempaqueta todas las capas en el orden correcto, creando un nuevo sistema de archivos "raíz" separado del host. docker también lee los metadatos de la imagen e inicia el "punto de entrada" o el "comando" especificado cuando se creó la imagen, lo que inicia un nuevo subárbol de proceso. Desde el interior del contenedor, ese primer proceso parece la raíz del árbol, pero desde el host se puede ver que es un subárbol de procesos.

El sistema de archivos raíz es lo que hace que una distribución de Linux sea diferente de otra (también puede haber algunas diferencias en el módulo del kernel y diferencias en el cargador de arranque/sistema de archivos de arranque, pero generalmente son invisibles para los procesos en ejecución). El kernel se comparte con el host y, de hecho, sigue administrando sus responsabilidades habituales dentro del contenedor. Pero el sistema de archivos raíz es diferente, por lo que cuando estás dentro del contenedor, se ve y se siente como cualquier distribución que haya en la imagen de Docker.

El contenedor no solo tiene su propio sistema de archivos y árbol de procesos, sino que también tiene su propia interfaz de red lógica y, opcionalmente, su propia asignación de RAM y tiempo de CPU. Sin embargo, usted tiene el control sobre el contenedor, como operador, por lo que puede decidir compartir la interfaz de red del host con el contenedor, otorgarle acceso ilimitado a la RAM y la CPU, e incluso montar dispositivos, archivos y directorios del host en el envase. El valor predeterminado es mantener las cosas separadas, pero tienes el poder de romper el modelo de aislamiento tanto como sea necesario.


Docker es un contenedor sobre LXC Linux Containers y la documentación para eso le permitirá saber en detalle qué se comparte y qué no.

En general, la máquina host ve/contiene todo dentro de los contenedores, desde el sistema de archivos hasta los procesos, etc. Puede emitir un comando ps en la máquina virtual host y ver los procesos dentro del contenedor.

Recuerde que los contenedores docker no son máquinas virtuales; por lo tanto, todo se ejecuta de forma nativa en el host y usa el kernel del host directamente. Cada contenedor tiene su propio espacio de nombres de usuario (similar a las cárceles raíz de antaño). Hay herramientas/características que aseguran que los contenedores solo vean sus propios procesos, tengan su propio sistema de archivos en capas en el sistema de archivos del host y una pila de red que se conecta a la pila de red del host.


Linux
  1. ¿Cómo ejecutar un programa dentro de un contenedor Docker?

  2. ¿Extraer archivo de la imagen de Docker?

  3. Actualización de un contenedor implementado en función de una imagen de Docker

  4. Reenviar el puerto del host al contenedor docker

  5. ¿Cómo determinar si un proceso se ejecuta dentro de lxc/Docker?

Docker Image vs Container:las principales diferencias

Cómo instalar la imagen de AlmaLinux 8 en Docker Container

¿Qué es Docker? ¿Como funciona?

¿Qué es un manifiesto de imagen de Docker?

Cómo conectarse a Localhost dentro de un contenedor Docker

Qué hacer si un contenedor Docker sale inmediatamente