Reto de la ballena azul - #1 Aprende el estado actual de Docker
Docker mas que una herramienta o tecnología ha evolucionado hasta convertirse en una plataforma y aun más que eso ahora es la plataforma líder en contenedores.
Hace mas de 2 años hice un pequeño post acerca de Docker detallando algunos conceptos de esta tecnología.
A pesar de que han pasado 2 años los conceptos no han cambiado.
Containers
Un contenedor es una pieza software que se ejecuta en un entorno aislado de otros procesos en el sistema operativo que lo contiene.
A diferencia de una virtual machine no emula un todo sistema operativo, sino que aprovecha las librerías y kernel del sistema huésped para funcionar.
Cabe aclarar que los containers son procesos que usan imágenes sistemas operativos que son mas ligeras que las tradicionales ya que no te preocupas por el kernel o el hardware.
Empezar a usar containers no implica que vas cambiar la forma en como programas ( o quizás si), el cambio más radical que pudieras encontrarte es el hacerte a la idea de que la tarea del contenedor es únicamente correr.
Como mencione anteriormente, cada pieza de software debe estar aislada y por pieza de software me refiero a : bases de datos, servidores, servicios, etc.
Y te preguntarás, ¿cómo conecto mi aplicación web con mi base de datos?
La forma de interactuar de estos con el mundo exterior es re-dirigiendo puertos del container al sistema host o hacer referencias a carpetas o archivos del sistema host(volumen).
Las ventaja de incluir containers en tu procese de desarrollo son:
- Adiós a los problemas de entornos de desarrollo y choques de dependencias.
- Mac, Linux o Windows no importa, puedes instalar Docker
- Fácil instalación de software de terceros (ya que solo debes levantar el contenedor y configurar).
- Puedes crear imágenes custom para usar en tus containers
- El stack no importa, puedes agregar node, go, ruby o lo que quieras en tu container.
- Empresas como Amazon, Google, Microsoft, digital ocean, etc. Ya ofrecen servicios para hacer uso de containers en la nube.
Una vez que te preparas psicológicamente para adaptar tu mente, código y procesos al uso de containers todo estará bien.
Imágenes
Para poder correr un container este necesita una imagen base de un sistema operativo pudiera ser : debian, ubuntu, etc. Estas pueden obtenerse de un repositorio de imágenes como Docker Hub o del Docker Store(en el store podemos comercializar las imágenes que subimos).
Si has usado Github esto es básicamente lo mismo pero para imágenes, es una plataforma que brinda el servicio para tener un control de versiones de las imágenes que generas con Docker, webhooks, integración con herramientas de integración continua, automatización de generación de imágenes al generar una nueva versión cambiando tu Dockerfile(es el archivo que describe como esta construida la imagen).
Herramientas
Docker Compose
Es una herramienta para describir, conectar y correr múltiples contenedores. Una característica genial de esta herramienta es que podemos definir nuestra arquitectura en un archivo y como cada elemento se conecta entre si.
Docker Swarm
Es una herramienta que nos permite crear, clusterizar contenedores, esto permite que podamos escalar nuestras aplicaciones y administrar los contenedores en nuestra arquitectura. Una alternativa a esta es Kubernetes.
Conclusión
No abarcamos muchas herramientas y otros conceptos porque en otros posts exploraremos de Docker y veremos como levantar aplicaciones con X lenguaje en contenedor, crear nuestras propias imágenes y agregarlas al Docker Hub, usar Docker Compose, administrar y monitorear containers, etc. Lo importante es que sepas que Docker existe, los elementos principales que nos describen como funciona y que puedo hacer con el.