Aislamiento de Docker y el sistema de archivos

El aislamiento de los contenedores docker es diferente al de una máquina virtual en varios aspectos.

¿Cómo se crean las imágenes?

Los contenedores se crean a partir de imágenes.  Muchos contenedores pueden crearse a partir de una sola imágen.  Las imágenes son creadas a partir de un Dockerfile que es un archivo que tiene como primera instrucción, la imagen base y luego una serie de instrucciones a ejecutar en la imágen, como ENV para introducir variables de entorno en la imágen, RUN para correr comandos en el contenedor, COPY y ADD para copiar archivos a la imágen desde el host y otros comandos más.  Al final de la ejecución una nueva imágen es creada.

Docker Architecture

Docker Architecture

¿Cómo son iniciados  los contenedores?

Los contenedores se inician a partir de una imágen. Se pueden generar varios contenedores a partir de la misma imagen, en caso de ser necesario, cuando hablamos de contenedores de aplicaciones que puedan escalar horizontalmente. En el momento que un contenedor inicia, realmente se constituye en un sistema operativo ejecutando y corre un comando inicial que servira como inicio a las tareas del contenedor, algo asi como el tradicional main() utilizado en algunos lenguajes para iniciar un programa.  El contenedor conceptualmente está en el medio de un programa en ejecución y un virtual machine.  Es un poco de los dós o más bien, un programa corriendo en su propio sistema operativo, pero compartiendo el kernel del sistema operativo host.

¿Cómo es el sistema de archivos de un contenedor?

Filesystem Layer

Filesystem Layer

Al crear las imágenes a partir de un Dockerfile, cada instrucción que se ejecute sin error en dicha construcción, se convierte en una capa de archivos en la imágen, identificable, y es una capa que puede ser accedida o instanciada en caso de depuraciones, cada capa es análoga a un commit en git, por lo cual tiene un identificador único.  Si todo se ejecuta correctamente en el dockerfile la imágen construida es una serie de capas de solo lectura, originadas de comandos que modificaron de alguna manera el sistema de archivos, y los cuales pueden ser verificados individualmente de ser necesarios, es decir se puede obtener el sistema justo en el estado deseado.

¿Solo lectura?

Al momento de crear un contenedor a partir de una imágen, es necesario una capa que pueda escribir para que el sistema operativo del contenedor corra, y modifique los archivos necesarios en tiempo de corrida, pero esta capa es descartada una vez se destruye el contenedor.  Los contenedores son efímeros, las imágenes son las que se mantienen, si hay algún problema en el contenedor, se corrige la imágen de la cual se originó, porque cualquier modificación en el contenedor, se eliminará cuando el mismo sea descartado.

Si es necesario que los datos sean persistentes, para una base de dato, un procesador de texto o cualquier aplicación, existen los volúmenes, que permiten mapear una carpeta del host a una carpeta del container, de modo que lo que se escriba, se esté escribiendo realmente en el host, u otro tipo de almacenamiento deseado como una carpeta compartida en red.

Lo mejor de los dos mundos

El sistema de archivos de los contenedores permite tener lo mejor de los dos mundos: Solo lectura para poder mantener la consistencia de las aplicaciones desde nuestro equipo hasta los servidores, y evitar una serie de errores que nos encontramos en diferentes ambientes, y la persistencia mediante los volúmenes para persistir los datos relevantes de nuestra aplicación.

 

Share: