Qué son los contenedores. Código abierto para emprendedores
Continuando con nuestra serie de artículos sobre aplicaciones útiles para emprendedores, ahora le toca el turno a los contenedores. Aunque se trata de una tecnología que es usada básicamente por el área de tecnología de la información, a diferencia de todas las demás que comentamos, aprendí de la manera más dura que mi padre tenía razón cuando me decia que uno tenía que saber de todo. Dado que el software hoy por hoy es un componente clave de cualquier emprendimiento, no está de más tener una noción básica de como funciona.
Voy a comenzar disculpándome por el lugar común de poner contenedores de transporte para ilustrar el artículo (algo que hacen todos los que escriben sobre el tema) Pero, como es la mejor analogía para explicar que son y para que sirven los contenedores en informática, renuncio a cualquier pretensión de originalidad.
Así como los contenedores de transporte surgieron para adaptarse a las diferencias en la configuración de los medios de locomoción, evitando de esa forma que se perdiera tiempo acomodando la carga, su versión digital sirve para evitar que los programadores deban tener que adaptar sus aplicaciones a todas las configuraciones posibles.
Qué son los contenedores
Un contenedor consiste en todo lo necesario para la ejecución de un programa: la aplicación, más todas sus dependencias, bibliotecas y otros binarios, y los archivos de configuración requeridos para ejecutarla, ubicado todo en un solo paquete. Al contener todo lo necesario para su ejecución, las diferencias entre los diferentes sistema operativos se vuelven irrelevantes.
A todos nos ha pasado que nos gusta un determinado programa pero,la actualización del sistema operativo hace que una dependencia necesaria ya no esté disponible. Si sabemos como hacerlo podemos crear un contenedor con las dependencias necesarias y el programa y ejecutarlo sin problemas.
Otro concepto asociado al de contenedores es el de microservicios. En lugar de empaquetar una aplicación completa, puedes crear un contenedor que cumpla una función que necesitan varios programas. Supongamos que tienes una publicación online de pago. La función de acceso a la publicación y la de facturación van a compartir información de la misma base de datos. Por lo tanto podrías tener un contenedor separado para esta última.
Diferencias con máquinas virtuales y paquetes autocontenidos
La principal diferencia con las máquinas virtuales es que estas simulan hardware, es decir que en la práctica es como utilizar un sistema operativo en una computadora normal
En el caso de los formatos de paquetes autocontenidos como Snap, FlatPak o Appimage, aunque contienen todas las dependencias para funcionar, aún utilizan componentes del sistema operativo anfitrión.
Ventajas de los contenedores
- Enfoque de microservicios: Gracias a los contenedores es posible separar las aplicaciones en sus funciones componentes y reutilizar estas.
- Consistencia: Dado que un programa instalado en un contenedor incluye todo lo necesario para su ejecución, su comportamiento será exactamente igual sin importar cuando y donde se ejecute
- Portabilidad. Siempre y cuando se use la misma plataforma para la creación y ejecución de los contenedores, el programa funcionará sin importar si se ejecuta en Windows, Linux o Mac.
Tecnologías de contenedores
Algunas de las tecnologías disponibles para desplegar contenedores son
Docker
Es la plataforma más conocida para la creación y ejecución de contenedores.
Docker permite empaquetar, enviar y ejecutar aplicaciones en cualquier nube pública o privada o sistema operativo de escritorio.
Red Hat CodeReady Containers
Es una herramienta de Red Hat que se usa desde una máquina virtual y puede utilizarse para el desarrollo y prueba de contenedores.
LXD
Desarrollado por Canonical, este sistema de gestión de contenedores nos brinda una experiencia muy parecida a la de usar una máquina virtual. Disponemos de un número de imágenes de distribuciones Linux preconfiguradas y podemos crear las nuestra.
Kubernetes
Dado que gestionar múltiples contenedores puede ser algo complejo. Kubernetes es una herramientas que nos permite implementar en forma fácil cambios y actualizaciones en todos los contenedores utilizados. Si algo sale mal, Kubernetes permite retroceder al estado anterior, reiniciar los contenedores que fallaron, eliminarlos y reemplazarlos.
Singularity
Es una solución de creación y ejecución de contenedores pensada para científicos. Los contenedores creados con Singularity pueden utilizarse para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos.
También puede importar imágenes creadas con Docker sin necesidad de tener que instalarlo.
Singularity puede importar tus imágenes de Docker sin necesidad de tener instalado Docker o ser un superusuario.