Cuando se trata de tecnologías de contenedores, dos nombres emergen como líderes de código abierto: Kubernetes y Docker. Y aunque son tecnologías fundamentalmente diferentes que ayudan a los usuarios con la gestión de contenedores, son complementarias entre sí y pueden ser poderosas cuando se combinan. En este sentido, elegir usar Kubernetes o Docker no es una cuestión de decidir qué opción es mejor; en realidad, no compiten entre sí y, de hecho, se pueden usar en conjunto. Entonces, a la pregunta de si Kubernetes o Docker son la mejor opción, la respuesta es ninguna.
El hecho de que Kubernetes y Docker sean tecnologías de contenedores complementarias aclara otra pregunta frecuente: ¿Kubernetes está reemplazando a Docker?
En resumen, no. Dado que Kubernetes no es una tecnología competidora, esta pregunta probablemente se deriva de la noticia que se conoció en 2021 de que Kubernetes ya no admitiría Docker como una opción de tiempo de ejecución de contenedores (es decir, un componente de contenedor que se comunica con el kernel del sistema operativo, SO, en todo el proceso de contenerización). Sin embargo, Kubernetes y Docker siguen siendo compatibles y brindan beneficios claros cuando se usan juntos, como exploraremos con mayor detalle más adelante en esta publicación. En primer lugar, es importante comenzar con la tecnología fundamental que une 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 está solo; se abstrae del sistema operativo host, generalmente 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 un contenedor virtualiza un sistema operativo, una VM aprovecha un hipervisor, una capa de software liviana entre la VM y el hardware de una computadora, 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 SO 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 de DNS del host.
Los ingenieros pueden usar contenedores para desarrollar rápidamente aplicaciones que se ejecuten de manera constante en una gran cantidad 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 particularmente adecuados para los flujos de trabajo de DevOps, lo que facilita el camino para que los desarrolladores y las operaciones de TI trabajen juntos en todos los entornos. Pequeños y livianos, 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 en la nube.
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, desplegar y gestionar contenedores. Este kit de herramientas también se conoce como containerd.
Aunque comenzó como un proyecto de código abierto, hoy Docker también se refiere a Docker, Inc., la empresa que fabrica el producto comercial Docker. Actualmente, es la herramienta más popular para crear contenedores, ya sea que los desarrolladores usen Windows, Linux o MacOS.
De hecho, las tecnologías de contenedores estuvieron disponibles durante décadas antes del lanzamiento de Docker en 2013. En los primeros días, los contenedores Linux (o LXC) eran los más frecuentes. Docker se creó sobre 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 escritorio, centro de datos o entorno de nube. Solo se puede ejecutar un proceso en cada contenedor, por lo que una aplicación puede ejecutarse continuamente mientras una parte de ella se actualiza o repara.
Algunas de las herramientas y terminología comúnmente utilizadas con Docker incluyen las siguientes:
Ahora revisemos por qué Kubernetes dejó de admitir Docker como tiempo de ejecución de contenedores. Como se señaló en la parte superior de esta sección, Docker es un contenedor y no un tiempo de ejecución de contenedor. Esto significa que Docker se asienta sobre un tiempo de ejecución de contenedor subyacente para proporcionar a los usuarios características y herramientas a través de una interfaz de usuario. Para admitir Docker como tiempo de ejecución, Kubernetes tuvo que admitir e implementar un tiempo de ejecución separado conocido como Docker Shim, que esencialmente se encontraba entre las dos tecnologías y las ayudaba a comunicarse.
Esto se hizo en un momento en que no había muchos tiempos de ejecución de contenedores disponibles. Sin embargo, ahora que existen, con CRI-O como ejemplo de uno de esos tiempos de ejecución de contenedores, Kubernetes puede proporcionar a los usuarios muchas opciones de tiempo de ejecución de contenedores, muchas de las cuales emplean la interfaz de tiempo de ejecución de contenedores (CRI) estándar, una forma para que Kubernetes y el tiempo de ejecución de contenedores se comuniquen de manera confiable sin una capa intermedia que actúe como intermediario.
Sin embargo, aunque Kubernetes ya no proporciona soporte especial a Docker como tiempo de ejecución, aún puede ejecutar y administrar contenedores construidos con Open Container Initiative (OCI), el formato de imagen propio de Docker que le permite usar Dockerfiles y crear imágenes Docker. En otras palabras, Dockers todavía tiene mucho que ofrecer en el ecosistema de 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 las imágenes de contenedores, utilizar contenedores existentes como imágenes base para crear nuevos contenedores y crear contenedores basados en el código fuente de la aplicación. Docker está respaldado por una vibrante comunidad de desarrolladores que comparte miles de contenedores a través de Internet mediante el Docker Hub.
Pero aunque Docker funciona bien con aplicaciones más pequeñas, las aplicaciones empresariales grandes pueden involucrar una gran cantidad de contenedores, a veces cientos o incluso miles, lo que se vuelve abrumador para los equipos de TI encargados de administrarlos. Ahí es donde entra en juego la orquestación de contenedores. Docker tiene su propia herramienta de orquestación, Docker Swarm, pero, con mucho, la opción más popular y sólida es Kubernetes.
Docker tiene 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 el despliegue, la gestión y el escalado de aplicaciones en contenedores. Los contenedores operan en una arquitectura de contenedores múltiples 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 los contenedores, o nodos de trabajo, en el clúster.
El nodo maestro determina dónde alojar las aplicaciones (o contenedores Docker), decide cómo reunirlas 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 la gestión de grandes volúmenes de contenedores a lo largo de sus ciclos de vida.
Google introdujo Kubernetes como un proyecto de código abierto en 2014. Ahora, está gestionado por 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 sólida funcionalidad, una comunidad activa de código abierto con miles de colaboradores y soporte y portabilidad entre los principales proveedores de la nube (por ejemplo, IBM Cloud, Google, Azure y AWS) .
Aunque Kubernetes y Docker son tecnologías distintas, son muy complementarias y forman una combinación poderosa. 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 todo 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 y desplegándolos automáticamente en entornos de TI para garantizar una alta disponibilidad. Además de ejecutar contenedores, Kubernetes ofrece los beneficios de la autocorrección, el equilibrio de carga y los despliegues y reversiones automatizados. Además, tiene una interfaz gráfica de usuario para facilitar 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 aquellas que ya usan Docker, Kubernetes hace uso de los contenedores y cargas de trabajo existentes mientras asume los complejos problemas involucrados en escalar a escala.
Las versiones posteriores de Docker tienen integración incorporada con Kubernetes. Esta característica permite a los equipos de desarrollo automatizar y gestionar de forma más eficaz todas las aplicaciones en contenedores que Docker les ayudó a crear.
Al final, se trata de qué combinación de herramientas necesita su equipo para lograr sus objetivos comerciales. Descubra cómo comenzar con estos tutoriales de Kubernetes y explore IBM Cloud Kubernetes Service para aprender más.
Obtenga una insignia a través de tutoriales gratuitos de Kubernetes basados en navegador con IBM CloudLabs.