En este artículo vamos a realizar una breve introducción al mundo de los contenedores. Explicaremos qué son los contenedores de software y cómo es la arquitectura de los contenedores en comparación con la de las máquinas virtuales. También veremos algunas diferencias entre trabajar con la virtualización de máquinas virtuales y hacerlo mediante contenedores de software.
Todo esto, nos permitirá entender mejor algunos conceptos teóricos que pueden ser un poco complejos y que son imprescindibles para poder avanzar en la creación de contenedores con Docker y en la orquestación de dichos contenedores con Kubernetes.
Qué vas as ver en esta entrada
¿Qué es un contenedor?
Para entender el concepto del contenedor de software, nos vamos a remontar a la logística, concretamente y para ser más exactos a la logística marítima. Tal y como apreciamos en esta imagen capturada en 1940 durante el transcurso de la 2ª guerra mundial, unos trabajadores portuarios descargan una mercancía en el famoso puerto de Bristol Inglaterra.
La descarga y el transporte de mercancía se ha realizado de muchas maneras distintas dependiendo principalmente del volumen y las resistencias de los productos. Siendo transportados en función de estas variables en sacos, bidones, redes, cajas de madera, baúles, palés, etc. Pero todo ello, conllevaba que cada uno de los mecanismos para el transporte de mercancías tenían distintos problemas de seguridad, distintos mecanismos de carga y descarga, etc.
En la actualidad, y desde hace muchos años, el proceso se ha estandarizado y prácticamente todo el transporte de mercancías marítimas se realiza a través de contenedores. Lo que ha provocado que dicho transporte sea mucho más eficiente, sin importar en exceso lo que se almacene en el interior de dicho contenedor.
Beneficios de los contenedores
Los beneficios de trabajar con contenedores (en lo referente a la logística marítima) han sido numerosos. Como por ejemplo:
- Nos permiten aislar el contenido de cada uno de los contenedores. Por tanto, cada uno de los contenedores vive aislado del resto de contenedores.
- Además de facilitarnos la identificación mediante un identificador (ID) para cada uno de los contenedores. Con el fin de saber qué contiene o a quién pertenece cada uno de los contenedores, etc.
- Tienen menor riesgo de que las mercancías que se almacenan en su interior se rompan, se caigan, etc.
- Al ser todos iguales, el proceso para realizar distintas operaciones (carga, descarga, etc.) está estandarizado. Por lo que se hace mucho más sencillo y es idéntico para todos los contenedores.
- Al aislar la mercancía en contenedores, evitamos que alguien pueda manipular los productos del interior del contenedor.
¿Qué son los contenedores de software?
En informática, el concepto de contenedores de software no es muy diferente al que acabamos de explicar en logística. Y podríamos afirmar que ha revolucionado el enfoque con el que trabaja la industria del software en lo referente a la implementación de servicios y aplicaciones.
Un contenedor de software no deja de ser similar a una especie de “caja”, que nos sirve para agrupar software en su interior.
Por lo que, tanto en el proceso de transporte de mercancías o bien en la informática, todos los procesos se adaptan al estándar que marcan los contenedores. En el caso de los contenedores de software, la finalidad puede ser la de simplificar la gestión del software, mejorar la automatización, etc.
¿Cómo funciona un contenedor de software?
Un ejemplo de cómo se trabaja con contenedores de software sería la siguiente imagen:
La infraestructura, también conocida como el “hierro”, es la que contiene los componentes, es decir, el hardware físico (disco duro, RAM, CPU, etc.) sobre el que trabajamos.
El motor de contenedores es una aplicación que nos permitirá gestionar los contenedores. Siendo una “especie de sistema operativo” que nos permitirá montar contenedores sin necesidad de tener que crear un hardware virtual. El motor de contenedores más popular actualmente sería Docker.
¿Qué es una máquina virtual?
El proceso de virtualizar una máquina consiste en hacer virtual una máquina. Es decir, emular un hardware dentro del propio sistema operativo sobre el que estamos trabajando con el fin de poder instalar en su interior un sistema operativo, un conjunto de aplicaciones, etc.
Por tanto, nos va a permitir crear un hardware virtual sobre el que podemos instalar un sistema operativo (también virtual) sobre el que podemos instalar y ejecutar programas como si de una “computadora normal” se tratara.
Esto nos permitirá, por ejemplo, ejecutar una máquina virtual con Linux desde un equipo con Windows:
Contenedores vs. Máquinas virtuales
Los contenedores y las máquinas virtuales tienen beneficios en común como son la asignación y el aislamiento de recursos. Pero lo hacen de una manera totalmente diferente. Los contenedores virtualizan el sistema operativo (por ello, con esta arquitectura no hace falta instalar sistemas operativos, etc.). Y, en cambio, las máquinas virtuales hacen una virtualización del hardware.
De este modo, algunas de las diferencias entre un contenedor de software y una máquina virtual son:
- Una máquina virtual contiene una abstracción de hardware sobre el que tenemos que instalar un sistema operativo, además de un conjunto de aplicaciones, etc. Todo esto provoca un mayor consumo de recursos frente al uso de contenedores tanto del sistema que una máquina virtual tanto en tamaño de disco ya que suelen ocupar algunos GB, como en uso de memoria RAM, etc. Por lo que podremos ejecutar menos máquinas virtuales que contenedores. Un contenedor, en cambio, tiene solamente lo necesario para ejecutar la aplicación. Por lo que consume menos recursos que una máquina virtual. Y al ejecutarse como un proceso lo que provocará que podamos tener más contenedores abiertos que máquinas virtuales.
- Las máquinas virtuales son más seguras por el hecho de estar aisladas del sistema operativo Host. En cambio, los contenedores son menos seguros, ya que se ejecutan directamente sobre sistema operativo (HOST) sin pasar previamente por un hipervisor.
- Otra diferencia entre ambos podría ser que el contenedor aísla una aplicación o un conjunto de aplicaciones. En cambio, las máquinas virtuales nos van a permitir ejecutar varios sistemas operativos distintos en una misma computadora.
Conclusión
En este artículo hemos explicado qué son los contenedores de software y hemos diseccionado las principales diferencias entre trabajar con máquinas virtuales y contenedores. Espero que os haya servido para entender algunos de los conceptos más actuales de la industria del software.
¿Te gustaría certificarte en Kubernetes? No te pierdas nuestros consejos para superar el examen de Certified Kubernetes Administrator (CKA). ¡Aprende más sobre contenedores en nuestro canal de YouTube! ¡Suscríbete!