Cuando hablamos de tecnologías de contenedores, dos nombres emergen como líderes de código abierto: Kubernetes y Docker. Y aunque son tecnologías básicamente diferentes que ayudan a los usuarios con la gestión de contenedores, son complementarias entre sí y pueden ser potentes cuando se combinan. En este sentido, elegir utilizar Kubernetes o Docker no es una cuestión de decidir qué opción es mejor; en realidad, no compiten entre sí y pueden utilizarse en tándem. Así pues, a la pregunta de si Kubernetes o Docker es la mejor opción, la respuesta es ninguna de las dos.
El hecho de que Kubernetes y Docker sean tecnologías de contenedores complementarias aclara otra pregunta frecuente: ¿reemplaza Kubernetes a Docker?
En pocas palabras, no. Dado que Kubernetes no es una tecnología que compita con Docker, es probable que esta pregunta derive de la noticia que saltó en 2021 de que Kubernetes dejaría de dar soporte a Docker como opción de tiempo de ejecución de contenedores (es decir, un componente de contenedor que se comunica con el núcleo del sistema operativo o SO durante todo el proceso de contenerización). Sin embargo, Kubernetes y Docker siguen siendo compatibles y ofrecen claros beneficios cuando se utilizan juntos, como exploraremos en mayor detalle más adelante en esta publicación. En primer lugar, es importante comenzar con la tecnología fundacional que une a Kubernetes y Docker: los contenedores.
Un contenedor es una unidad ejecutable de software que empaqueta el código de la aplicación con sus dependencias, lo que le permite ejecutarse en cualquier infraestructura de TI. Un contenedor es independiente; se abstrae del sistema operativo anfitrión (normalmente Linux), lo que lo hace portátil en todos los entornos de TI.
Una forma de entender el concepto de contenedor es compararlo con una máquina virtual (VM). Ambos se basan en tecnologías de virtualización, pero mientras que un contenedor virtualiza un SO, una VM aprovecha un hipervisor (una capa ligera de software entre la VM y el hardware de un ordenador) para virtualizar el hardware físico.
Con la virtualización tradicional, cada VM contiene una copia completa de un sistema operativo (SO) invitado, una copia virtual del hardware necesario para ejecutar el sistema operativo y una aplicación (y sus bibliotecas y dependencias asociadas). Un contenedor, por otro lado, incluye solo una aplicación y sus bibliotecas y dependencias. La ausencia de un host invitado reduce significativamente el tamaño de un contenedor, haciéndolo ligero, rápido y portátil. Además, un contenedor utiliza automáticamente la configuración DNS del host.
Los ingenieros pueden utilizar contenedores para desarrollar rápidamente aplicaciones que se ejecuten de forma coherente en un gran número de sistemas distribuidos y entornos multiplataforma. La portabilidad de los contenedores elimina muchos de los conflictos que surgen de las diferencias en herramientas y software entre equipos funcionales.
Esto los hace especialmente adecuados para los flujos de trabajo de DevOps, lo que facilita el trabajo conjunto de los desarrolladores y las operaciones de TI en todos los entornos. Pequeños y ligeros, los contenedores también son ideales para arquitecturas de microservicios, en las que las aplicaciones se componen de servicios más pequeños y poco acoplados. Y la contenerización suele ser el primer paso para modernizar las aplicaciones on-premises e integrarlas con los servicios cloud.
Docker es una plataforma de contenerización de código abierto. Básicamente, es un kit de herramientas que hace que sea más fácil, seguro y rápido para los desarrolladores crear, implementar y gestionar contenedores. Este kit de herramientas también se conoce como containerd.
Aunque comenzó como un proyecto de código abierto, hoy en día Docker también hace referencia a Docker, Inc., la empresa que produce el producto comercial Docker. Actualmente, es la herramienta más popular para crear contenedores, tanto si los desarrolladores utilizan Windows, Linux o MacOS.
De hecho, las tecnologías de contenedores estuvieron disponibles durante décadas antes del lanzamiento de Docker en 2013. En sus inicios, los contenedores de Linux (o LXC) eran los más extendidos. Docker se basó en LXC, pero la tecnología personalizada de Docker superó rápidamente a LXC para convertirse en la plataforma de contenerización más popular.
Entre los atributos clave de Docker se encuentra su portabilidad. Los contenedores Docker pueden ejecutarse en cualquier entorno de escritorio, centro de datos o entorno en la nube. Solo puede ejecutarse un proceso en cada contenedor, por lo que una aplicación puede funcionar de forma continua mientras una parte de la misma se somete a una actualización o se repara.
Algunas de las herramientas y la terminología utilizadas habitualmente con Docker son las siguientes:
Ahora veamos por qué Kubernetes dejó de dar soporte a Docker como tiempo de ejecución de contenedores. Como se ha indicado al principio de esta sección, Docker es un containerd y no un tiempo de ejecución de contenedores. Esto significa que Docker se asienta sobre un tiempo de ejecución de contenedores subyacente para proporcionar a los usuarios características y herramientas a través de una interfaz de usuario. Para soportar Docker como tiempo de ejecución, Kubernetes tuvo que soportar e implementar un tiempo de ejecución separado conocido como Docker Shim, que esencialmente se situaba entre las dos tecnologías y las ayudaba a comunicarse.
Esto se hizo en una época en la que no había muchos tiempos de ejecución de contenedores disponibles. Sin embargo, ahora que los hay (con CRI-O como ejemplo), Kubernetes puede ofrecer a los usuarios numerosas opciones de tiempo de ejecución de contenedores, muchas de las cuales utilizan la interfaz estándar de tiempo de ejecución de contenedores (CRI), una forma de que Kubernetes y el tiempo de ejecución de contenedores se comuniquen de forma fiable sin una capa intermedia que actúe como intermediario.
Sin embargo, aunque Kubernetes ya no ofrece un soporte especial a Docker como tiempo de ejecución, todavía puede ejecutar y gestionar contenedores creados con la Open Container Initiative (OCI), el formato de imagen propio de Docker que permite utilizar Dockerfiles y crear imágenes Docker. En otras palabras, Docker todavía tiene mucho que ofrecer en el ecosistema Kubernetes.
La plataforma de contenerización Docker ofrece todos los beneficios mencionados anteriormente de los contenedores, incluidos los siguientes:
Otras características de la API de Docker incluyen la capacidad de rastrear y revertir automáticamente imágenes de contenedores, utilizar contenedores existentes como imágenes base para crear otros nuevos y crear contenedores basados en el código fuente de las aplicaciones. Docker está respaldado por una dinámica comunidad de desarrolladores que comparte miles de contenedores en internet a través del Docker Hub.
Pero mientras que Docker funciona bien con aplicaciones más pequeñas, las grandes aplicaciones empresariales pueden implicar un gran número de contenedores (a veces cientos o incluso miles), lo que resulta abrumador para los equipos de TI encargados de gestionarlos. Ahí es donde entra en juego la orquestación de contenedores. Docker tiene su propia herramienta de orquestación, Docker Swarm, pero la opción más popular y robusta con diferencia es Kubernetes.
Docker dispone de varios comandos utilizados en la creación y ejecución de contenedores:
Kubernetes es una plataforma de orquestación de contenedores de código abierto para programar y automatizar la implementación, la gestión y el escalado de aplicaciones contenerizadas. Los contenedores operan en una arquitectura de múltiples contenedores llamada “clúster”. Un clúster de Kubernetes incluye un contenedor designado como plano de control que programa las cargas de trabajo para el resto de contenedores (o nodos de trabajo) del clúster.
El nodo maestro determina dónde alojar las aplicaciones (o contenedores Docker), decide cómo agruparlas y gestiona su orquestación. Al agrupar los contenedores que componen una aplicación en clústeres, Kubernetes facilita el descubrimiento de servicios y permite gestionar grandes volúmenes de contenedores a lo largo de su ciclo de vida.
Google introdujo Kubernetes como proyecto de código abierto en 2014. Ahora, lo gestiona una fundación de software de código abierto llamada Cloud Native Computing Foundation (CNCF). Diseñado para la orquestación de contenedores en entornos de producción, Kubernetes es popular debido en parte a su robusta funcionalidad, una activa comunidad de código abierto con miles de colaboradores y el apoyo y la portabilidad a través de los principales proveedores de nubes públicas (p. ej., IBM® Cloud, Google, Azure y AWS).
Aunque Kubernetes y Docker son tecnologías distintas, son muy complementarias y forman una potente combinación. Docker proporciona la pieza de contenerización, lo que permite a los desarrolladores empaquetar fácilmente aplicaciones en contenedores pequeños y aislados a través de la línea de comandos. Los desarrolladores pueden ejecutar esas aplicaciones en su entorno de TI, sin tener que preocuparse por problemas de compatibilidad. Si una aplicación se ejecuta en un solo nodo durante las pruebas, se ejecutará en cualquier lugar.
Cuando aumenta la demanda, Kubernetes proporciona orquestación de contenedores Docker, programándolos e implementándolos automáticamente en entornos de TI para garantizar una alta disponibilidad. Además de ejecutar contenedores, Kubernetes ofrece los beneficios del equilibrio de carga, la autorreparación y las implementaciones y reversiones automatizadas. Además, cuenta con una interfaz gráfica de usuario que facilita su uso.
Para las empresas que prevén escalar su infraestructura en el futuro, podría tener sentido utilizar Kubernetes desde el principio. Y para aquellos que ya utilizan Docker, Kubernetes hace uso de los contenedores y cargas de trabajo existentes a la vez que aborda los complejos problemas relacionados con el escalado.
Las versiones posteriores de Docker llevan incorporada la integración con Kubernetes. Esta característica permite a los equipos de desarrollo automatizar y gestionar de forma más eficaz todas las aplicaciones contenerizadas que Docker les ayudó a crear.
Al final, se trata de saber qué combinación de herramientas necesita su equipo para alcanzar sus objetivos empresariales. Compruebe cómo dar sus primeros pasos con estos tutoriales de Kubernetes y explore el IBM® Cloud Kubernetes Service para más información.
Gane una insignia a través de tutoriales sin coste de Kubernetes basados en navegador con IBM® CloudLabs.