OpenShift vs. Docker

Docker proporcionó el triunfo de la virtualización basada en contenedores. Este software es una tecnología básica para crear y ejecutar contenedores de aplicaciones. Los desarrolladores utilizan Docker en sus portátiles, por ejemplo, para estandarizar los flujos de trabajo de desarrollo. OpenShift, en cambio, se encuentra en el otro extremo del espectro de la virtualización y cubre requisitos operativos de toda una organización, que utilizan como base los entornos de nube pública y privada.

Las dos tecnologías no son en absoluto competidoras directas. De hecho, OpenShift solía basarse indirectamente en Docker y aún utiliza su formato de contenedores. A continuación, ofrecemos una visión general y analizamos los puntos fuertes y débiles, al igual que los respectivos escenarios de implementación de estas tecnologías.

¿Cómo podemos comparar OpenShift y Docker?

En las discusiones online sobre OpenShift y Docker, así como en las publicaciones de los blogs, a menudo se plantea la pregunta: “¿Cuál es la mejor herramienta para la virtualización de contenedores?”. Sin embargo, son tecnologías muy distintas. Tanto OpenShift como Docker tienen su razón de ser y suelen utilizarse de forma complementaria.

Hacer una comparación entre las tecnologías OpenShift y Docker es difícil. De hecho, sería como preguntar: “¿Qué es mejor, un coche o el transporte público?”. En principio, ambos tienen una tarea similar: trasladar personas y mercancías. Además, las ruedas también están presentes en ambas tecnologías, pero son conceptos totalmente diferentes.

A diferencia de los contenedores físicos, el equivalente virtual no es un elemento de transporte. Siendo este el caso, utilicemos una analogía biológica para entenderlo mejor. Los contenedores de aplicaciones y las células biológicas tienen mucho en común. Ambas son una unidad fundamental de información encapsulada y sellada externamente que en conjunto crea vida.

En el mundo de los seres vivos, la evolución tuvo lugar desde los organismos unicelulares hasta los organismos pluricelulares. Del mismo modo, en el mundo virtual se pasó de los contenedores individuales a las redes orquestadas de contenedores que interactúan entre ellos. Por esta razón, los retos asociados a la multicelularidad se asemejan a los desafíos que surgen de la interacción de varios contenedores.

Las células biológicas y los contenedores de aplicaciones deben comunicarse entre sí. Según sea necesario, tienen que volver a crecer o morir. Los recursos totales disponibles deben, por tanto, distribuirse entre las unidades individuales. Todo esto debe estar bien coordinado para que el sistema global pueda reaccionar a las demandas cambiantes y permanecer estable a largo plazo. Con el siguiente resumen, te explicamos la gama de virtualización de contenedores, desde Docker hasta OpenShift:

Tecnología

Uso

Equivalente biológico

Docker

Containerización

Células simples (por ejemplo, las bacterias)

Docker Compose

Orquestación de contenedores

Células simples y complejas (por ejemplo, la levadura)

Docker Swarm, K8s (Kubernetes)

Orquestación de contenedores/clústeres

Organismos multicelulares independientes

OpenShift

Orquestación multiclúster

Grupo de seres vivos

La pregunta de cuál es mejor solo puede responderse adoptando una perspectiva específica. Es decir, depende del punto de vista para saber cuál de los dos enfoques es “mejor”. Este también es el caso de la comparación entre OpenShift y Docker.

De la virtualización de contenedores a la orquestación y a la gestión multiclúster

Docker popularizó la virtualización de contenedores y desplazó en gran medida a las máquinas virtuales (VM), que eran dominantes en ese momento. El triunfo de los contenedores web revolucionó la forma de construir, empaquetar y ejecutar aplicaciones, dado que los contenedores son una unidad de software estandarizada. Estos pueden utilizarse sin problemas siempre y cuando se disponga del correspondiente runtime de contenedores.

A diferencia de las anteriormente omnipresentes, pero bastante pesadas máquinas virtuales, los contenedores son ligeros. De esta manera, se pueden ejecutar miles de contenedores en un solo host. Esta ventaja inherente a la virtualización de los contenedores condujo a la extensión del uso de arquitecturas de microservicios distribuidos. En lugar de construir una aplicación monolítica, se divide el ámbito funcional en componentes individuales y cada componente se empaqueta como un servicio en su propio contenedor. A continuación, los contenedores se inician y los servicios se comunican entre sí a través de la red.

El enfoque de microservicios es especialmente práctico para el desarrollo de software porque permite utilizar las tecnologías más adecuadas para cada servicio. En lugar de estar atados a lenguajes y paradigmas de programación individuales, pueden variar entre los servicios. Además, a medida que se añaden nuevas tecnologías, es más fácil reimplantar servicios individuales.

La posibilidad de clonar varios contenedores semejantes a partir de una imagen de contenedor redunda en la escalabilidad del sistema global. Si la demanda aumenta, se ponen en marcha contenedores adicionales y el servicio respectivo escala horizontalmente. Sin embargo, esto requiere un sistema que supervise los contenedores en ejecución y los termine o, mejor dicho, inicie nuevos contenedores cuando sea necesario. Además, las solicitudes entrantes deben distribuirse a los contenedores individuales.

Con la escalabilidad, la complejidad del sistema crece considerablemente y, por tanto, es recomendable tener en cuenta los siguientes aspectos:

  • Recepción de las solicitudes a través del balance de carga
  • Distribución de las tareas a los contenedores individuales
  • Supervisión del estado de las instancias del contenedor
  • Terminar e iniciar nuevas instancias
  • Establecer una red entre los contenedores
  • Mantener los contenedores o imágenes con actualizaciones, etc.

Todo ello supone una enorme sobrecarga administrativa, pero eso no es todo. Además, está el mantenimiento del propio sistema administrativo. Este nivel de control, que realiza todos los puntos mencionados anteriormente, también debe ser mantenido, supervisado y provisto de actualizaciones. Por supuesto, nunca debería haber una pérdida de rendimiento notable por parte del usuario y la seguridad de todo el sistema debe estar garantizada en todo momento.

Por último, pero no menos importante, también se ha de destacar la orquestación de los clústeres de contenedores a través de los límites de la infraestructura. A más tardar en este punto, la complejidad del sistema ha crecido hasta tal punto que es difícil para el ser humano de manejar. Por eso, las organizaciones necesitan herramientas especiales para hacer frente a esta complejidad, por lo que surgen las alternativas a OpenShift.

OpenShift vs. Docker: ¿qué hay en medio?

Como ya se ha mencionado, OpenShift y Docker son tecnologías que están muy alejadas entre ellas. La comparación tiene más sentido cuando se considera el software “Kubernetes”, también conocido como K8s. El paso de Docker a K8s es comparable a la transición de un organismo unicelular a un organismo multicelular. Y de manera similar, el paso de K8s a OpenShift es comparable a la transición de un solo organismo a un grupo de seres vivos. Desde este punto de vista, examinemos de nuevo las tecnologías utilizadas:

Software

Uso

Descripción

Docker

Containerización

Gestiona contenedores individuales

Docker Compose

Orquestación de contenedores

Gestiona varios contenedores asociados

Docker Swarm, K8s

Orquestación de contenedores/clústeres

Gestiona un gran número de contenedores en clústeres informáticos y escala según sea necesario

OpenShift

K8s Management Solution

Controla múltiples clústeres K8s a través de los límites de la nube, incluyendo herramientas de desarrollo integradas, monitorización, CI/CD, etc.

De hecho, OpenShift se basa en K8s, que a su vez se basó originalmente en Docker, pero Docker y K8 se separaron hace poco tiempo. Veamos los dos extremos del espectro (OpenShift y Docker) en detalle.

Docker: la tecnología básica de contenedores

Docker es una tecnología de código abierto que puede utilizarse para empaquetar aplicaciones en contenedores o ejecutar contenedores de aplicaciones. Se utiliza para crear contenedores de aplicaciones portátiles y autocontenidos que pueden ejecutarse en un entorno de nube o en hardware informático local. Este software proviene de la empresa homónima Docker Inc., que ofrecen, además de la versión gratuita de código abierto, varios productos por los que cobra una cuota.

Docker es tres herramientas en una:

  1. Docker Engine, que proporciona las funcionalidades principales de la virtualización de contenedores.
  2. Docker Compose, una funcionalidad que orquesta múltiples contenedores como un compuesto.
  3. Docker Swarm, un modo que permite la orquestación de clústeres de contenedores en múltiples hosts.

Docker Engine consta a su vez de tres componentes principales:

  1. El daemon de Docker, que se ejecuta como dockerd en el host.
  2. La API de Docker, que es proporcionada por el daemon de Docker. El daemon de Docker se dirige y controla a través de la API.
  3. La interfaz de la línea de comandos (CLI), que se utiliza como un comando de Docker para comunicarse con la API de Docker.

El Docker Engine es nativo de Linux. También hay un paquete fácil de instalar para Mac y Windows llamado Docker Desktop. Docker Desktop simplifica la configuración e incluye una interfaz gráfica de usuario. Además, se incluyen otras tecnologías derivadas de Docker, como, por ejemplo, Docker Compose.

¿Qué ventajas tiene Docker?

Docker se ha establecido como el estándar para la virtualización de contenedores durante la última década. Por ello, no es de extrañar que el software funcione en una amplia variedad de sistemas operativos. Además, Docker es relativamente fácil de instalar y también es fácil empezar con la funcionalidad básica. Otra característica que resulta especialmente práctica es la enorme gama de contenedores de imágenes prediseñados. Estos contienen entornos de software para el desarrollo y la producción y pueden obtenerse en los registros públicos de contenedores. En comparación con OpenShift, Docker es una tecnología mucho menos compleja.

¿Qué desventajas tiene Docker?

Los mayores inconvenientes de Docker provienen de su crecimiento orgánico a lo largo de los años. Lo que comenzó como una virtualización de contenedores se ha convertido hoy en día en una plataforma monolítica que hace demasiadas cosas a la vez. Con Docker Swarm y Docker Compose, el uso de Docker va mucho más allá de sus objetivos originales. En comparación con los enfoques modernos, Docker es relativamente débil en términos de seguridad y rendimiento.

¿Para qué fines es más adecuado Docker?

Actualmente, Docker está fuertemente posicionado como una herramienta para el desarrollo de software. Los entornos de desarrollo locales se encapsulan como contenedores junto con las herramientas y los flujos de trabajo utilizados. Las imágenes creadas de este modo pueden compartirse entre los desarrolladores y sentar las bases de un desarrollo estandarizado y reproducible.

Además, Docker sirve de base para las tecnologías construidas sobre él. Las herramientas de desarrollo como, por ejemplo, DDEV y Lando, utilizan Docker para simplificar el desarrollo local. Con plataformas como Portainer y Mirantis (antes Docker Enterprise), existen potentes herramientas para la orquestación de contenedores.

Consejo

Aprende a utilizar contenedores en tu sistema con nuestro tutorial sobre Docker.

OpenShift: la potente plataforma de aplicaciones y desarrollo

Como ya se ha mencionado, OpenShift se sitúa al otro lado del espectro de contenedores. Este software se utiliza para construir entornos de aplicación y desarrollo distribuidos y escalables según el modelo “platform as a service” (PaaS). Para ello, proporciona un entorno de ejecución completo en el que se despliegan, ejecutan, gestionan y orquestan los contenedores. Las herramientas integradas simplifican los flujos de trabajo de desarrollo e implantación.

Se utiliza una distribución especial de Kubernetes (K8s) como base de OpenShift. Esto puede desplegarse a través de los límites de la nube y la infraestructura, logrando una experiencia de usuario consistente. La funcionalidad principal del K8 se complementa con funciones de seguridad y supervisión y se basa en la gestión centralizada de políticas. Con esto, se garantiza un alto nivel de calidad en todo el entorno de software de una organización.

¿Cuáles son las ventajas de OpenShift?

En primer lugar, OpenShift domina la complejidad operativa asociada a la administración de clústeres K8s autogestionados. Se pueden gestionar de forma centralizada varios clústeres K8s a través de los límites de las infraestructuras de nube pública y privada. Siguiendo el enfoque de PaaS, los desarrolladores internos pueden solicitar automáticamente recursos para sus proyectos a través de una interfaz web. Las herramientas y los flujos de trabajo integrados para integración continua (Continuous Integration) y entrega continua (Continuous Delivery) (CI/CD) completan la gama de funciones y permiten reducir drásticamente los plazos de entrega.

OpenShift se basa en una distribución especial K8s para orquestar los contenedores y los clústeres. Originalmente, K8s se basaba en Docker como tiempo de ejecución de contenedores, pero esta dependencia se ha disuelto. En su lugar, se utiliza el container runtime interface de la Open Container Initiative (CRI-O), que tiene ventajas en términos de seguridad y rendimiento.

En general, OpenShift resulta positivo por sus medidas de seguridad integradas. Con “Quay”, se dispone de un registro de contenedores especialmente protegido. La autorización y la autenticación de extremo a extremo limitan el acceso de los usuarios a las distintas áreas del sistema. Además, el alojamiento de clústeres individuales en diferentes regiones geográficas permite un mejor cumplimiento en términos de protección de datos.

¿Cuáles son las desventajas de OpenShift?

OpenShift solo se ejecuta en sistemas operativos especiales de Red Hat, como “Red Hat Enterprise Linux CoreOS” (RHCOS) y “Red Hat Enterprise Linux” (RHEL) y se considera que la instalación requiere mucho tiempo. De hecho, en los proyectos de mayor envergadura, la instalación puede durar varias semanas. Debido a las estrictas precauciones de seguridad, no se pueden utilizar todas las imágenes de los contenedores de los registros públicos.

¿Para qué fines es más adecuado OpenShift?

Las “platform as a service” (PaaS), los “software as a service” (SaaS) y los “containers as a service” (CaaS) de las empresas se implementan sobre la base de OpenShift. El objetivo se centra claramente en las grandes organizaciones y, de hecho, OpenShift es demasiado grande y difícil de manejar para los desarrolladores individuales.

OpenShift vs. Docker: comparación directa

Aunque sea difícil comparar directamente OpenShift y Docker, existe la posibilidad de comparar las características individuales de las dos tecnologías. Para ser más exhaustivos, volvemos a incluir a Kubernetes (K8s) en la comparación:

Propiedad

OpenShift

K8s

Docker

Fuente de suministro del software

Además de las versiones empresariales ofrecidas por Red Hat, OKD es una edición comunitaria de libre acceso

La distribución oficial “Vanilla” de K8s está publicada como proyecto de código abierto por la “Cloud Native Computing Foundation” (CNCF)

El software es ofrecido por la empresa Docker Inc. Los componentes de código abierto subyacentes se desarrollan en el marco del proyecto “Movy”

 Modelo de despliegue

Posibilidad de despliegue de nubes multiples e híbridas

Las implantaciones de nubes múltiples e híbridas son un reto

Despliegues multi-nube para Docker Swarm

Plataformas en la nube compatibles

Como solución gestionada, OpenShift se ejecuta en las plataformas de nube AWS, Azure, Google Cloud e IBM Cloud. Al ser una solución autogestionada, el software puede funcionar en prácticamente cualquier infraestructura

Muchas plataformas en la nube ofrecen alojamiento gestionado de K8s.

Muchas plataformas en la nube ofrecen soluciones dedicadas de “containers as a service” (CaaS)

Instalación

Requiere un entorno de clústeres o nube para su instalación

Incluido como componente de Docker, o integrado en las soluciones Managed K8s

Fácil de instalar en un solo host

Lanzamientos

Hasta tres lanzamientos al año

Hasta cuatro lanzamientos al año

Varias versiones de los componentes individuales de Docker cada año

Gestión de actualizaciones

Actualizaciones simplificadas por el operador de versiones del clúster

Las actualizaciones continuas permiten que el sistema se actualice sin pérdida de rendimiento

Posibilidad de actualizaciones continuas para Docker Swarm

Gestión de imágenes de contenedores

El propio registro de contenedores Quay de Red Hat contiene imágenes con vulnerabilidad comprobada

No hay registro nativo de contenedores

Se pueden utilizar todos los registros públicos, especialmente Docker Hub

Uso de plantillas

Además de las plantillas propias de OpenShift, se utilizan potentes “operadores” para estandarizar el despliegue y el funcionamiento de las aplicaciones

Los llamados “cuadros de mando” proporcionan un mecanismo flexible para definir los grupos de K8s.

Los contenedores individuales se definen mediante Dockerfile; para Docker Compose se utiliza un archivo YAML

Gestión de la red

Red definida por software (SDN) y red superpuesta mediante Open vSwitch (OVS)

No hay gestión nativa de la red

Red multihosting con red superpuesta

Interfaz web

La interfaz web de OpenShift está considerada como una de las mejores del sector

No hay interfaz web nativa

Docker Desktop es una aplicación GUI; hay varias interfaces web disponibles para su instalación

Canalización integrada de CI/CD

Las versiones anteriores utilizaban el estándar industrial “Jenkins”; ahora se utiliza “Tekton”

No hay canalización nativa de CI/CD; es posible la instalación a través de Helm

Se puede configurar para su uso con GitHub Actions; Jenkins incluye un plugin para su uso con Docker

Elementos de seguridad

Amplios elementos de seguridad

Los elementos de seguridad deben aplicarse por proyecto

Características básicas de seguridad

Uso empresarial

Utilizado por más de dos mil organizaciones en todo el mundo

Cada vez lo utilizan más empresas, en parte como solución gestionada o como componente de otro software

Componente central del desarrollo de software moderno