Contenedores

¿Qué es DOCKER?

La palabra "DOCKER" se refiere a varias cosas. Esto incluye un proyecto de la comunidad de open source, herramientas del proyecto de open source, Docker Inc., la empresa que es la principal promotora de ese proyecto y las herramientas que la empresa admite formalmente. El hecho de que las tecnologías y la empresa compartan el mismo nombre puede ser confuso.

Esta es una breve explicación:

  • "Docker”, el software de TI, es una tecnología de creación de contenedores, que permite la creación y el uso de contenedores de Linux®.
  • La comunidad Docker de open source trabaja para mejorar estas tecnologías a fin de beneficiar a todos los usuarios de forma gratuita.
  • La empresa, Docker Inc., desarrolla el trabajo de la comunidad Docker, lo hace más seguro y comparte estos avances con la comunidad más amplia. También respalda las tecnologías mejoradas y reforzadas para clientes empresariales.

Con DOCKER, puede considerar los contenedores como máquinas virtuales extremadamente livianas y modulares. Y obtiene flexibilidad con estos contenedores, que puede crear, implementar, copiar y mover de un entorno a otro.


¿Cómo funciona Docker?

La tecnología Docker usa el kernel de Linux y funciones de este, como Cgroups y namespaces, para segregar procesos y que puedan ejecutarse de manera independiente. Esta independencia es la intención de los contenedores, la capacidad de ejecutar varios procesos y aplicaciones separados unos de los otros para hacer un mejor uso de su infraestructura, y mantener la seguridad que tendría con sistemas separados.

Las herramientas del contenedor, como Docker, ofrecen un modelo de implementación basado en imágenes. Esto permite compartir una aplicación o un conjunto de servicios, con todas sus dependencias en varios entornos. Docker también automatiza la implementación de la aplicación (o conjuntos combinados de procesos que conforman una aplicación) dentro del entorno del contenedor.

Estas herramientas desarrolladas en contenedores de Linux, lo que hace a Docker fácil de usar y único, les otorgan a los usuarios un acceso sin precedentes a aplicaciones, la capacidad de implementar rápidamente, y controlar las versiones y su distribución.


¿Es la tecnología Docker la misma que la de los contenedores de Linux tradicionales?

No. En un comienzo, la tecnología Docker se desarrolló sobre la base de la tecnología LXC, lo que la mayoría de las personas asocia con contenedores de Linux "tradicionales”, aunque, desde entonces, se alejó de esta dependencia. LXC era útil como virtualización liviana, pero no tenía una buena experiencia de desarrollador o usuario. La tecnología Docker aporta más que la capacidad de ejecutar contenedores; también facilita el proceso de crear y desarrollar contenedores, enviar y versionar imágenes (entre otras cosas).

Los contenedores de Linux tradicionales usan un sistema init que puede gestionar varios procesos. Esto significa que aplicaciones enteras pueden ejecutarse como una. La tecnología Docker pretende que las aplicaciones se dividan en sus procesos separados y ofrece las herramientas para hacerlo. Este enfoque granular tiene sus ventajas.


Las ventajas de los contenedores Docker

Modularidad

El enfoque Docker para la creación de contenedores se centra en la capacidad de tomar una parte de una aplicación, actualizarla o repararla, sin tomar innecesariamente toda la aplicación. Además de estos enfoques basados en microservicios, puede compartir procesos entre varias aplicaciones de la misma forma que funciona la arquitectura orientada a servicios (SOA).

Capas y control de versión de imagen

Cada archivo de imagen de Docker está conformado por una serie de capas. Estas capas se combinan en una única imagen. Una capa se crea cuando la imagen cambia. Cada vez que un usuario especifica un comando, como ejecutar o copiar, se crea una nueva capa.

Docker reutiliza estas capas para construir nuevos contenedores, lo cual hace mucho más rápido el proceso de construcción. Los cambios intermedios se comparten entre imágenes, mejorando aún más la velocidad, el tamaño y la eficiencia. El control de versiones es inherente a la creación de capas. Cada vez que hay un nuevo cambio, básicamente, usted tiene un registro de cambios incorporado: control completo de sus imágenes de contenedor.

Restauración

Probablemente la mejor parte de la creación de capas es la capacidad de restaurar. Toda imagen tiene capas. ¿No le gusta la iteración actual de una imagen? Restáurela a la versión anterior. Esto soporta un enfoque de desarrollo ágil y ayuda a hacer realidad la integración e implementación continuas (CI/CD) desde una perspectiva de herramientas.

Implementación rápida

Solía demorar días desarrollar un nuevo hardware, ejecutarlo, proveerlo y facilitarlo. Y el nivel de esfuerzo y sobrecarga era extenuante. Los contenedores basados en Docker pueden reducir el tiempo de implementación a segundos. Al crear un contenedor para cada proceso, puede compartir rápidamente los procesos similares con nuevas aplicaciones. Y, debido a que un SO no necesita iniciarse para agregar o mover un contenedor, los tiempos de implementación son sustancialmente inferiores. Asimismo, con la velocidad de implementación, puede crear y destruir datos creados por sus contenedores sin preocupación, de forma fácil y accesible.

Entonces, la tecnología Docker es un enfoque más granular y controlable, basado en microservicios, que coloca mayor valor en la eficiencia.


¿Hay limitaciones para el uso de Docker?

En sí mismo, Docker es muy bueno para gestionar contenedores únicos. Al comenzar a utilizar más y más contenedores y aplicaciones en contenedores, desglosadas en cientos de piezas, la gestión y la orquestación se pueden tornar muy difíciles. Eventualmente, debe detenerse y agrupar contenedores para ofrecer servicios, como redes, seguridad, telemetría, etc., en todos sus contenedores. Es aquí donde ingresa Kubernetes.

Con Docker, no se obtiene la misma funcionalidad tipo UNIX que se obtiene con contenedores de Linux tradicionales. Esto incluye poder usar procesos como cron o syslog dentro del contenedor, junto con su aplicación. También existen limitaciones, por ejemplo, sobre la eliminación de procesos nieto después de terminar con los procesos hijo; algo que es inherente a la administración de contenedores de Linux tradicionales. Estas cuestiones se pueden mitigar mediante la modificación del archivo de configuración y la configuración de esas habilidades desde el comienzo (algo que no es inmediatamente obvio a simple vista).

Asimismo, existen otros subsistemas y dispositivos de Linux que no tienen espacios de nombres. Estos incluyen SELinux, Cgroups y dispositivos /dev/sd*. Esto implica que, si un atacante obtiene control de estos subsistemas, el host se ve comprometido. Para permanecer liviano, compartir el kernel del host con contenedores abre la posibilidad de vulnerabilidad. Esto difiere de las máquinas virtuales, las cuales están fuertemente separadas del sistema host.

El daemon del Docker también puede ser una preocupación en materia de seguridad. Para usar y ejecutar los contenedores docker, es muy probable que utilice el daemon del Docker, un tiempo de ejecución persistente para contenedores. El daemon del Docker requiere privilegios de raíz, por lo que se debe prestar especial atención a quiénes obtienen acceso a este proceso y en dónde reside este. Por ejemplo, un daemon local tiene una superficie de ataque más pequeña que uno que se encuentra en un sitio más público, como un servidor web.

Hay mucho más para hacer con los contenedores