26

¿Qué son los containers y por qué solucionan problemas de virtualización?

26511Puntos

hace 3 años

Uno de los grandes desafíos de las y los desarrolladores, en cualquiera de sus facetas, es comprender la compatibilidad de los diferentes entornos en los que va a correr una aplicación. Cada vez que comenzamos un proyecto, tal vez inconscientemente, utilizamos diferentes librerías, intérpretes, programas y procesos del sistema operativo y esto, muchas veces, puede ser el principio de un problema.

Por suerte, siempre que hay un inconveniente recurrente alguien encuentra una solución. Así es como los diferentes entornos están cambiando su forma de virtualizar y creando soluciones aggiornadas a las nuevas herramientas. La más disruptiva de estas herramientas fue Docker, que masificó el concepto de los containers y estandarizó una forma de construir pequeñas cajas que pueden enchufarse en cualquier entorno y funcionar de la misma forma. El sueño hecho realidad.

Gracias a Docker, grandes entornos de desarrollo están modificando (o ya modificaron por completo) sus herramientas para abandonar la lógica de las máquinas virtuales y adoptar la tecnología de containerización (¿existirá esta palabra?).

En este post vamos a abordar algunas de las ventajas de este tipo de entornos de desarrollo, pero empecemos por el principio.

¿Cuál era el problema?

La virtualización fue la primera gran solución a los problemas de compatibilidad entre entornos. Nos permitía correr diferentes sistemas operativos y versiones en una misma máquina, un avance revolucionario en su momento.

Sin embargo, virtualizar es un mundo de aventuras. El punto de partida es el mismo: la imagen de un sistema operativo, pero a partir de ahí se deben repetir los mismos pasos para obtener el mismo entorno. Es decir que, si en un entorno se instaló una librería, debo asegurarme de que la misma esté instalada en todos los entornos en los que correrá la aplicación. Si la actualizo ocurre lo mismo. Si la elimino, también.

Y esto se puede sostener por un tiempo, todos lo hicimos en algún momento, pero ¿qué pasa  cuando una aplicación tiene un número muy grande de dependencias, o cuando crece el equipo y más personas pueden aplicar cambios, o cuando pasan los años y ya no recordamos lo que hicimos el primer día (algunos ya somos viejos en esto), o cuando la aplicación escala y necesitamos replicar con gran velocidad un entorno exactamente igual? Ahí es cuando todo es caos, pánico y tragedia. O era, porque ahora tenemos a los imprescindibles containers.

La solución: containers

Un container es como una caja que contiene adentro todas las herramientas que necesita nuestra aplicación. Es lo básico que hay que saber. Esa caja solo sabe lo que tiene dentro y, salvo que alguien le diga cómo, no se entera de nada de lo que ocurre por fuera. Si a esto le sumamos la posibilidad de distribuir estas cajas de forma masiva y simple con repositorios de containers, tenemos la herramienta más potente para resolver el problema inicial.

Este post no intenta explicar el uso, la creación o la tecnología de los containers, sino más bien plantearlos como una solución a un problema histórico del rubro de la programación.

¿Hay más ventajas?

Esta tecnología cambió la forma de trabajo en todos los procesos de desarrollo. Nos ayudó a lograr que lo que funciona en nuestra computadora, funcione en cualquier otro dispositivo que pueda correr containers, es decir,  la inmensa mayoría.

Además, permitió que diferentes empresas/proyectos/comunidades puedan distribuir sus herramientas y soluciones de una forma más fácil, masiva y completa, mejorando la experiencia de las y los desarrolladores.

Para dar ejemplos voy a hablar de entornos para WordPress que son el pan de cada día para mi equipo de trabajo, aunque esto aplica a casi todos los proyectos y lenguajes.

Antes cambiar una versión de PHP implicaba descargarla, instalarla, configurarla, descargar los módulos y complementos acordes con la versión. Imagínate cuando querías testear tus plugins o themes en 5 o 6 versiones para garantizar la retrocompatibilidad. Era una inversión de tiempo, esfuerzo y recursos que intentábamos evitar a toda costa.

Ahora esto se puede lograr cambiando un comando o una línea de código. Claro, porque otra gran ventaja es que permite crear infraestructura basada en código.

Es todo 💚 para quienes nos dedicamos a esto.

Al mismo tiempo, comunidades como WordPress pudieron desarrollar sus propios containers, que están disponibles en Docker Hub, y sus propias herramientas como las librerías wp-env. Estas últimas permiten, a partir de un comando, generar una infraestructura de contenedores lista para desarrollar plugins o themes.

Otras comunidades como XAMPP o WP Engine, por medio de LocalWP, pudieron optimizar sus entornos y brindar nuevas herramientas para facilitarnos la vida.

Si te interesa aprender más sobre estas herramientas, te espero en el Curso de Entornos de Desarrollo y Deployment con WordPress donde vamos a ver qué ventajas tiene cada una y en qué casos conviene usarlas.

Y nunca te olvides de que la próxima solución a un problema cotidiano y que cambie para siempre la forma en la que trabajamos, puede ser la tuya.

Lucio
Lucio
whoisnegrello

26511Puntos

hace 3 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
3
9205Puntos
3 años

Me gusto la forma de explicar como soluciona un contenedor el problema antigo que se tenia…, y aprendi una nueva palabra aggiornadas

2
26017Puntos
2 años

Aggiornadas”. Interesante palabra, tampoco la conocía. Aquí culturizándome con Lucio. 👍

2
3337Puntos
3 años

Primera vez que leo acerca de Docker y el uso de contenedores. Gracias

2
9205Puntos
3 años

Algo interesante que acabo de poner en practica, y que esta en el curso de Docker fue desarrollar dentro de un contenedor para un ambiente .net core…algo realmente util.

2
23028Puntos
3 años

Docker es importantisimo a la hora de programar, y automatizar bases de datos con contenedores es mindblowing!