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.

A continuación le presentamos una breve explicación:

  • El software de TI de Docker es tecnología en contenedores que permite la creación y el uso de contenedores Linux®.
  • La comunidad Docker de open source trabaja para mejorar estas tecnologías y 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 el resto de la comunidad. También respalda las tecnologías mejoradas y reforzadas para clientes empresariales.

Con DOCKER, usted podrá utilizar los contenedores como máquinas virtuales muy livianas y modulares, y obtendrá tal flexibilidad que podrá crearlos, implementarlos, copiarlos y pasarlos 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 los conjuntos combinados de procesos que constituyen una aplicación) en este entorno de contenedores.

Estas herramientas creadas a partir de los contenedores Linux (lo cual los vuelve únicos y fáciles de usar) les otorgan a los usuarios un acceso sin precedentes a las aplicaciones, la habilidad de implementar rápidamente y controlar las versiones y su distribución.


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

No. Al principio la tecnología Docker se creó a partir de LXC (que la mayoría de las personas relacionan con los contenedores Linux "tradicionales"), aunque se ha alejado de esa dependencia. LXC era útil como virtualización liviana, pero no ofrecía una buena experiencia al desarrollador ni al usuario. La tecnología Docker no solo aporta la capacidad de ejecutar contenedores; también facilita su creación y diseño mediante el envío de imágenes y el control de versiones de 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 versión es inherente a la creación de capas. Cada vez que hay un cambio nuevo, existe básicamente un registro de cambios integrado con control total de las 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. Cuando comienza a usar cada vez más contenedores y aplicaciones en contenedores, es muy difícil hacer la separación en cientos de piezas, la administración y la orquestación. Finalmente, debe retroceder y agrupar los contenedores para proporcionar servicios (de red, de seguridad, de telemetría, etc.) en todos los contenedores. Aquí es cuando aparecen los Kubernetes.

Con Docker no se obtiene la misma funcionalidad tipo UNIX que se obtiene con los contenedores Linux tradicionales. Por ejemplo, no se obtiene la capacidad para usar procesos como cron o syslog en el contenedor, junto con la aplicación. Del mismo modo, existen ciertos límites, como la limpieza de los procesos nieto después de terminar con los procesos hijo, lo cual es un proceso inherente en los contenedores 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.

Con los contenedores se puede hacer mucho más