Docker es una de las nuevas tecnologías más punteras y que más está ayudando a crear sistemas de apps. En Hamro Dev es una de las tecnologías que más estamos demandando a todos nuestros candidatos y es un requisito indispensable para entrar a trabajar con nosotros. ¿Por qué? En este artículo te explicaremos de que va y por qué está ganando tantísimos adeptos cada día que pasa.
Los sistemas de virtualización iniciales
La virtualización es una tecnología que lleva mucho tiempo entre nosotros y que ha avanzado a pasos agigantados. La virtualización básicamente es la de tener un ordenador fisico, y dentro de ese ordenador, crear varios mini-ordenadores virtuales que actúen de forma completamente independiente entre ellos. De esta manera, por ejemplo, podríamos tener un sistema con un sistema operativo (Linux, por ejemplo) y dentro de ese sistema , varios subsistemas completamente independientes entre ellos (salvo por que están hospedados en la misma máquina y comparten el mismo espacio operativo...) con memoria independiente (aunque en la misma máquina), espacio en el disco duro asignado para ellos y su propio ancho de banda y conexión a internet asignado.

¿Para que querríamos tener esto? Bueno, básicamente porque en el momento en el que internet comenzó a crecer, comenzó a ser más barato crear una única máquina gigante y conectarla a internet, que tener varios ordenadores conectados entre sí. Era más sencillo si se dividía ese gran ordenador en pequeños sub ordenadores que eran gestionados por el ordenador principal y luego esos sub sistemas se vendían a cada cliente en función de la cantidad de potencia que necesitasen (ya que de media, un cliente no necesitaba tanta potencia como podía ofrecer uno de esos super ordenadores).
Docker lleva este paso un poquito más allá por dos cosas.
Docker- sistemas de contenedores virtuales
Docker es el siguiente paso en la evolución de estas virtualizaciones. A menudo - sobretodo en internet - las aplicaciones se conectan entre si y se pasan información como si fuesen servicios que están conectados entre ellos. En internet por ejemplo, puedes tener un servicio que sea tu base de datos al que tu servidor web se conecta para obtener la información que necesita o almacenar datos.
Antiguamente, todo esto solía encontrarse en un mismo ordenador, pero a medida que la informática fué avanzando, esto fué cambiando. Conforme un sistema escala y va haciéndose más grande, lo más ideal es separar cada uno de estos servicios en diferentes máquinas y luego conectarlos entre si para librar y localizar los cuellos de botella. De esta idea es de donde nace Docker.

Por un lado, docker crea pequeños contenedores que ejecutan única y exclusivamente las cosas que un servicio necesita. En vez de "un mini ordenador dentro de un ordenador" , son las "partes de un ordenador que vas a necesitar utilizar para ejecutar ese servicio" metidas en un pequeño contenedor virtual dentro de uno de esos mini ordenadores.
Por otro lado, Docker crea todo un ecosistema con su propio lenguaje de definición / programación. Algo parecido a un HTML pero que sirve para definir sistemas que luego puedes ejecutar y correr en prácticamente cualquier lugar. Algo así como crear un microsistema, meterlo en un fichero y luego llevarlo a cualquier lugar donde poder ejecutarlo y correrlo. Un "lenguaje de programación" de servidores virtuales.
Un pequeño ejemplo
Aquí vemos unos cuantos ejemplos de lo que estamos hablando. Con estos archivos docker-compose podemos fácilmente ejecutar un servidor mongo-db como una base de datos, o un servidor mysql con su propio sistema de administración ,así como un servidor NODE.JS o una base de datos en posgre sql.
Además, docker se sirve de imágenes guardadas en repositorios para funcionar. No son imágenes como las que puedes ver en facebook (aunque su nombre hace referencia a ello) sino archivos que ya contienen la base de estos subsistemas sobre los cuales trabajaremos.
A partir de estas imágenes, podemos configurar nuestros "ordenadores virtuales" a la carta y como queramos, conteniendo todos los servicios ya programados y ejecutándose en muy poco tiempo. Utilizar docker tiene muchísimas ventajas.
Portable, fácil de mover y de pasar entre desarrolladores.
Docker es muy portable. Cualquier desarrollador que tenga docker instalado en su ordenador tan solo necesita los ficheros de configuración (que no suelen ocupar mucho espacio) y poder reproducir el sistema sobre el cual se va a trabajar.
Altamente configurable y con una comunidad creciente de desarrolladores
A partir de estos archivos, podemos configurarlos con exactamente las necesidades que vaya a tener nuestro sistema. En lugar de tener que instalar un montón de softwares diferentes y perder días de desarrollo en testear y optimizar estos sistemas, podemos empezar a programr en cuestión de minutos e ir escalando nuestros sistemas de desarrollo a medida que avancemos en la programación.
Fácilmente replicable
¡Pues no lo entiendo, en mi ordenador si que funciona! Ya nunca más podrán utilizar esa excusa ni será una razón de peso que haga que una cosa funcione en un lugar pero no en otro.
De desarrollo a producción en un clic y una linea de código
Normalmente en programación se entiende como un "entorno de producción" a aquel sistema que ya está funcionando y operativo ,sirviendo su cometido. Por contrario, un "entorno de desarrollo" es un entorno de pruebas en el que el sistema da más información y expone más los errores para que sea más sencillo al equipo de desarrollo el programar.
Existen muchos mecanismos de fácilmente pasar de un entorno de desarrollo a uno de producción, pero docker lo hace casi instantaneo.
Optimizado para escalar.
¿El ordenador se te empieza a quedar pequeño? No pasa nada, docker te permite escalar fácilmente y asignar multiples nodos a cada uno de tus servicios para que funcionen simultaneamente. De esta manera conforme tu servicio requiere más peticiones, aumenta el número de "nodos", o "trabajadores virtuales" que se necesitan para abastecer correctamente las peticiones de tu sistema. Además, como es fácilmente portable, si en algún momento tu sistema tiene que moverse a un ordenador más sencillo, es casi tan sencillo como migrar la carpeta de un servidor a otro (casi... y según que sistema).
Utilizado por grandes empresas.
Las grandes empresas cada vez ofrece mas y más soporte para este tipo de entornos. Docker es ya un estandar en la industria que permite crear sistemas robustos y escalables y acoplarlos en diferentes servicios. Por ejemplo Amazon Web Services - algo que habrás escuchado muy a menudo si te mueves en el mundillo - se basa muy fuertemente en la utilización de este tipo de imágenes y sistemas docker.
Gran repositorio de imágenes y mucha facilidad para crear las tuyas.
Si por ejemplo necesitas utilizar un software especifico en un servidor, es muy probable que ya exista una imagen que se encargue de utilizar ese software. No obstante ,crear una imagen a partir de otra es tremendamente sencillo, lo cual te permite hacer un pequeño paso adicional de personalización a la hora de crear servidores virtuales para tus apis o servicios de desarrollo.
En definitiva, DOCKER está siendo cada vez más la herramienta predilecta utilizada por miles de programadores que necesitan crear sistemas escalables de forma rápida y fiable. En Hamro Dev la consideramos una de las tecnologías más imprescindibles , y la utilizamos en prácticamente todos nuestros proyectos.
¿Y tú, crees que tu empresa o app puede beneficiarse de utilizar docker? Coméntanos tu idea o proyecto a través de nuestro formulario de contacto y te ayudaremos a decidir si es la tecnología ideal para tu proyecto y en caso de serlo, por qué.
¿Eres un desarrollador que busca más información sobre docker? La comunidad docker ha documentado bastante bien todo , y es muy sencillo seguir su tutorial en su página web principal para aprender a utilizarlo. En Hamro utilizaremos este espacio para colocar algunas ideas y tutoriales . En nuestra sección inglesa puedes encontrar algunos ejemplos, como utilizar docker y LAMPP para el desarrollo web, o docker y Joomla.