Cómo funcionan Docker y sus contenedores

Docker es una plataforma de virtualización a nivel de sistema operativo y, como vimos recientemente, permite crear una aplicación y empaquetarla junto con sus dependencias y librerías en un contenedor que será capaz de ejecutarse en cualquier otra máquina que disponga de una capa para la gestión de dichos contenedores.  En este artículo, profundizamos en el funcionamiento de  Docker, sus componentes y la distribución de contenido, repasando también sus principales utilidades prácticas

Esta es la razón fundamental del éxito de Docker en el mundo del desarrollo. La ventaja de poder ejecutar un desarrollo en cualquier máquina, siempre que disponga de las herramientas necesarias para ello, es muy potente ya que no solo se está facilitando el «empaquetado» de una aplicación y sus dependencias en un solo contenedor, sino que se ofrece un nivel de abstracción total de sistema operativo.

Mediante Docker, no hay necesidad de realizar pruebas en cada entorno en el que se vaya a ejecutar la aplicación, ni siquiera hay que realizar ajustes o reconfiguraciones. Por lo tanto, se trata de una herramienta muy interesante y que facilita mucho la labor de los desarrolladores.

Los componentes de Docker

Docker es una herramienta de desarrollo y un entorno de ejecución. Todo se basa en el concepto de imagen de contenedor. Como esbozamos en nuestro artículo anterior al definir sus componentes, cada contenedor es una instancia de una imagen, y múltiples contenedores a partir de la misma imagen serán completamente idénticos, clones, que tan solo se diferenciarán por la capa de escritura, los datos y archivos que manejen en cada caso en particular.

Cuando se elimina el contenedor, es decir, una instancia determinada, se elimina también esa capa de escritura a menos que se realice un docker commit. Al hacer esto, todo el contenedor, incluida la capa de escritura, se guarda como una nueva imagen de contenedor.

Los componentes principales de Docker son:

  • Docker Daemon, o Docker Engine, una capa delgada entre los contenedores y el kernel de Linux. Es el entorno de tiempo de ejecución persistente que administra los contenedores de aplicaciones, y es independiente del sistema operativo subyacente, por tanto, cualquier contenedor de Docker puede ejecutarse en cualquier servidor que tenga habilitado este servicio.
  • Dockerfile es un documento que se utiliza para crear las imágenes de contenedor. Un Dockerfile es un documento de texto que contiene toda la información de configuración y los comandos necesarios para ensamblar una imagen de contenedor. El encargado de convertir un dockerfile en un contenedor es, como se puede imaginar, el Docker Daemon.
  • Docker dispone además de una interfaz por línea de comandos con múltiples herramientas que permiten controlar el ciclo de vida de los contenedores. Se trata de una lista bastante extensa que cubre una amplia cantidad de órdenes específicas y que se puede consultar aquí. Gracias a estas herramientas es posible compilar, exportar y etiquetar, o disponer de funciones de tiempo de ejecución como ejecutar, eliminar, iniciar y detener un contenedor, entre otras.

Distribución de contenido con Docker

Este es un mecanismo fundamental para Docker, puesto que la distribución de contenido proporciona un conjunto de utilidades para empaquetar, enviar, almacenar, descubrir y reutilizar los contenidos de los contenedores.

Para entender la distribución de contenidos hablaremos de los registros, y también de Docker Hub, el registro público de Docker.

  • Registro. Un registro de Docker es un lugar donde las imágenes de contenedor se publican y almacenan y puede ser remoto o local. En caso de ser público, el acceso es libre para todos; si es privado, estará restringido a una organización o un conjunto de usuarios. Un registro de Docker incluye un conjunto de API comunes que permiten a los usuarios crear, publicar, buscar, descargar y administrar imágenes de contenedor.
  • Docker Hub es un registro de contenedor público basado en la nube administrado por Docker. Docker Hub da soporte para el flujo de trabajo de descubrimiento, distribución y colaboración de imágenes. Además, Docker Hub tiene un conjunto de imágenes oficiales certificadas por Docker. Estas son imágenes de editores de software conocidos como Canonical, Red Hat y MongoDB. Es posible utilizar estas imágenes oficiales como base para crear imágenes y aplicaciones propias.

Por otro lado, hay que volver a destacar la inmutabilidad natural del modelo Docker container. Ya que cada contenedor es una instancia de una imagen que no cambia —ya que son de solo lectura—, todos los contenedores derivados serán también, desde el principio, inmutables. Y los beneficios de esta cualidad son muy numerosos, como el control de versiones, actualizaciones más limpias y con cambios de estado más manejables.