Tabla de contenidos
Docker lleva el concepto de aplicaciones al servidor. Un contenedor Docker contiene una aplicación, pero también todos los recursos que necesita en tiempo de ejecución. Docker puede desarrollar sus ventajas particularmente bien en entornos de clúster y centros de datos.
En una frase pegadiza, Docker es una virtualización sin virtualización. La tecnología detrás de esto se llama contenedorización. Docker es una implementación de la tecnología de contenedores, que se caracteriza por sus propiedades particularmente fáciles de usar y que hizo que el término contenedor fuera popular como alternativa a las máquinas virtuales en primer lugar.
Un contenedor combina una sola aplicación con todas sus dependencias como bibliotecas, programas auxiliares y datos estáticos en un archivo de imagen, pero sin contener un sistema operativo completo. Por tanto, los contenedores se pueden comparar con una virtualización ligera.
Principales características y ventajas de los contenedores
Los contenedores requieren menos recursos que las máquinas virtuales porque no tienen que iniciar su propio sistema operativo y, en cambio, ejecutarse en el contexto del sistema operativo host. Sin embargo, los contenedores están sellados entre sí y del sistema host, aunque no con tanta fuerza como con la virtualización. Esto es posible gracias a varias características de Linux, incluidos los espacios de nombres y cgroups.
Los contenedores de Docker se inician a partir de una imagen de contenedor que se puede transferir fácilmente de un sistema a otro como un archivo simple. Por lo tanto, la instalación, actualización y desinstalación del software se reducen a un simple proceso de copia o eliminación de un solo archivo.
Se puede iniciar cualquier cantidad de contenedores desde una imagen de Docker, ya que el acceso de escritura no afecta la imagen del contenedor, sino su propio sistema de archivos que se superpone a la imagen. Para muchas aplicaciones, las imágenes de contenedor terminadas se pueden descargar desde el concentrador de Docker e iniciarse inmediatamente. En la medida de lo posible, la configuración ya está configurada en la imagen. Las partes variables, como la configuración de la red, se crean automáticamente al inicio.
Una de las principales ventajas de los contenedores Docker es su buena escalabilidad. Si se requieren instancias adicionales de una aplicación, simplemente se pueden iniciar nuevos contenedores y, después de detenerlos, han desaparecido por completo del sistema. La administración de una mayor cantidad de contenedores se facilita con herramientas para la orquestación de contenedores, como Google Kubernetes.
Requisitos de software para Docker
Desde la versión 2.4.19 del kernel, los espacios de nombres de Linux se pueden usar para bloquear procesos individuales en una subárea específica del sistema de archivos. Esto es similar a un cambio de raíz clásico, en el que un proceso utiliza la llamada al sistema chroot para restringir el sistema de archivos que es visible para sí mismo a un subárbol del sistema general. En versiones posteriores, el concepto de espacio de nombres se amplió para incluir recursos adicionales.
En la versión 4.10 del kernel de Linux, se pueden utilizar el ID de proceso (PID) de los espacios de nombres adicionales, la red, la comunicación entre procesos (IPC), los nombres de dominio y host (UTS) y el ID de usuario (UID). Cada espacio de nombres mantiene su propio conjunto del recurso correspondiente, independientemente del sistema principal. Esto hace posible, por ejemplo, que el superusuario root aparezca en el contenedor con el UID 0 habitual, pero tenga un UID sin privilegios en el sistema principal.
Los cgroups de Linux ofrecen una funcionalidad similar a los espacios de nombres en el sentido de que limitan los recursos disponibles para ciertos procesos, como la memoria principal. Sin embargo, afectan a grupos de procesos y también permiten un cálculo separado del consumo de recursos dentro del grupo respectivo, así como la congelación y activación conjunta de los procesos.
Con los espacios de nombres y cgroups de Linux, las propiedades esenciales de un sistema operativo Linux se pueden emular dentro de un contenedor. Por tanto, actúa como un sistema independiente para el software que se ejecuta en el contenedor, sin necesidad de una virtualización completa.
Desventajas de la contenerización
La renuncia a la inclusión de un sistema operativo en el contenido de las imágenes del contenedor significa menos aislamiento que la virtualización. Algo similar también se aplica a la virtualización, que ofrece una separación más débil de sus propios servidores dedicados.
Al mismo tiempo, prescindir de un sistema operativo completo en el contenedor también puede ofrecer una mayor seguridad, ya que solo debe estar disponible el software que requiere la aplicación en el contenedor. Esto reduce la cantidad de herramientas genéricas del sistema operativo que un atacante podría aprovechar.
Docker en sistemas distintos de Linux
Docker se creó en el entorno Linux y, en consecuencia, la descripción en este texto se centra en los sistemas operativos Linux. Los contenedores Docker ahora también se pueden usar en Mac OS y Windows, en Windows 10, por ejemplo, de forma nativa a través de Hyper-V.