Qué es Docker?

dockerDocker es una plataforma para desarrollar, shippear y ejecutar aplicaciones utilizando la tecnología de virtualización de contenedores.

La idea es sencilla pero muy poderosa, todos sabemos que hace algunos años, para tener una aplicación corriendo en internet, necesitábamos un server exclusivo para esta. Es decir, así tuviéramos corriendo un servicio que atendia millones de requests por segundo o uno request por hora, teníamos un server para eso. Las contras de esto son conocidas, desperdicio masivo de recursos.

Un camino mas inteligente fue el de las maquinas virtuales, super utilizado actualmente, tenemos un solo server, que contiene varias maquinas virtuales corriendo en el. Es decir, que en lugar de tener una sola aplicación por server, ahora tenemos N aplicaciones en un server.  Sin embargo seguimos teniendo una desventaja, tenemos nuestro server con un sistema operativo + hypervisor. Y cada una de nuestras VMs tienen un sistema operativo y sobre este nuestra aplicación.

virtualizacion

Ahora si, que pasaría si en lugar de tener que instalar un sistema operativo en cada VM, podemos tener un contenedor que tenga nuestra aplicación y dependencias y que se comunique directamente con el kernel del sistema operativo del server.

Docker

Esta es la arquitectura de un server con Docker, tenemos el server con un sistema operativo, sobre este corre el Motor de Docker (Docker Engine) y sobre este cada uno de los container con la aplicación y sus dependencias.

Ventajas del uso de Docker

Ahorro de Recursos

Nuestros contenedores solo tienen nuestra aplicación y sus dependencias, no tenemos más un sistema operativo que consuma recursos.

Consistencia entre ambientes

Nuestro ambiente de desarrollo va a ser el mismo que en producción, no mas Infierno de Dependencias o En mi maquina funciona!. Si nuestra aplicación funciona dentro de un container de Docker, y en producción utilizamos Docker, estamos seguros de que la aplicación va a funcionar.

Compartir el ambiente de desarrollo

Ya no vamos a tener que gastar horas en armar ambientes de desarrollo para nuestro equipo, o intentar sincronizar los ambientes de desarrollo cuando por ejemplo cambiamos alguna version de interprete de Ruby. Simplemente compartimos en nuestro repositorio el Dockerfile, y cada desarrollador de nuestro equipo tiene una copia idéntica del ambiente de desarrollo en su maquina.

Escalabilidad

El tiempo que tarda un container en arrancar es mucho menor al de un sistema operativo, consume muchos menos recursos. En cuanto necesitemos mas instancias de nuestra aplicación, solo levantamos unos nuevos containers y listo. Esto también es una técnica utilizada con maquinas virtuales (AWS, Heroku, Azure, etc. lo hacen), pero el costo monetario y de tiempo de levantar una instancia de un container es muchísimo menor, según la web de Docker 7x mas rápido.

En el próximo posts voy a publicar un ejemplo de como usar Docker para una aplicación Ruby on Rails + Postgres.

 

 

One thought on “Qué es Docker?

Leave a Reply

Your email address will not be published. Required fields are marked *