Algunos dicen que Docker: https://www.docker.com/ es el futuro, más bien diría que es el presente, sobre todo para muchas grandes empresas, y es que la actividad de gigantes como Google, Spotify, Netflix… no se entiende sin la tecnología de contenedores, y esto no es de ahora, sino desde hace tiempo.
Antes de continuar, lo suyo es hablar de lo que es un contenedor software, básicamente se trata de abstraer una aplicación del entorno dónde se ejecuta, de modo que ese contenedor de aplicación incluya todo lo necesario para ser funcional. Muchas veces se compara con la virtualización de servidores, no es exactamente lo mismo, pero el ejemplo puede ayudarnos a entenderlo. La idea es: lo importante es la aplicación, y nos da igual el “hierro” y entorno software sobre el que se ejecute. En todo caso el objeto de este artículo no es explicar qué es un contendor software, o de qué se trata Docker, lo suyo es empaparse primero de la tecnología por otros medios, bibliografía hay para dar y tomar en la red.
Lo que vamos a hablar, es de cómo adaptar Docker a una PYME, y es que está genial una gestión a través de contenedores para aplicaciones que requieran una gran escalabilidad automática, con picos importantes de usuarios en un momento dado, o que requieran una disponibilidad casi absoluta, con nodos levantándose en datacenters geográficamente distantes.
¿Pero sirve esta tecnología para una empresa pequeña?
Yo creo que sí, pero por supuesto adecuándola al escenario. Una empresa pequeña a lo mejor no necesita un orquestador como Kubernetes, más complicado de entender y que requiere más recursos hardware, y puede optar por Swarm, o si insiste en la primera solución, puede abstraerse con soluciones más sencillas como Rancher.
Incluso puede que no necesite un orquestador, es más, antes de trastear con éstos, lo suyo es ir poco a poco. Y un buen comienzo puede ser a través de Portainer.
Portainer https://www.portainer.io/ es una aplicación web gratuita orientada a gestionar un entorno de contenedores Docker casi de manera integral.
Desde Portainer es posible levantar contenedores, gestionar imágenes, desarrollar despliegues con formato stack, manejar volúmenes de datos persistentes y en definitiva controlar cualquier servidor Docker (local o remoto) que tengamos en nuestra infraestructura. Además, Portainer añade funcionalidades extra muy interesantes, como la gestión de usuarios (posibilidad de integrarlo con LDAP o Dominio) para crear grupos de desarrollo y permisos de acceso a los contenedores o información del entorno.
De cara a la gestión de un contenedor cualquiera, desde Portainer podremos visualizar de un modo sencillo los LOGs, ver el consumo de recursos hardware y acceder por consola para ejecutar los comandos que necesitemos dentro del mismo, a qué suena genial.
Estas son algunas capturas de pantalla de la aplicación, que nos abstrae, sobre todo al principio, de pegarnos con comandos concretos de Docker, aunque como es lógico, lo suyo es que terminemos familiarizándonos con los mismos, lo primero porque uno no quita para lo otro, lo segundo porque es el mejor método para aprender e ir un poco más allá.
En la web oficial del proyecto tenemos más información, e incluso podemos levantar un entono demo para probarlo y ver de lo que es capaz. Portainer puede ampliarse también a través de extensiones de pago, que aumentan sus posibilidades, sobre todo orientado a mejorar la gestión de entornos complejos.
¿Cómo levantar portainer?
Teniendo como base un equipo con Docker, es tan sencillo como levantar un contenedor nuevo con la imagen oficial de Portainer.
En su documentación oficial se detalla la puesta en marcha, que básicamente consiste en ejecutar un simple comando. Algo parecido a esto:
docker run -d -p 9000:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes/portainer:/data -v /certs:/certs --name portainer portainer/portainer:latest --ssl --sslcert /certs/server_cert.crt --sslkey /certs/server_key.key
Es decir, levantamos en el puerto 9000 la imagen de portainer oficial en su última versión, asignando un volumen de datos persistente para que no se pierdan configuraciones si actualizamos o paramos el contenedor, y como siempre es recomendable, activamos un acceso ssl indicando el certificado y clave del servidor (hay documentación de cómo integrarlo con Let´s encrypt https://letsencrypt.org/es/.
Caso típico para empezar: el laboratorio
Sobre el escenario típico de tener una infraestructura virtual, podemos por ejemplo dar de alta una nueva máquina con Linux, e instalar Docker+Portainer para comenzar. También podemos por ejemplo empezar con alguno de los servidores “viejos” o “medio-retirados”.
Quizá en un primer momento, sobre todo mientras aprendemos y profundizamos más en la tecnología, el acceso se puede quedar encuadrado a desarrolladores software y administradores de sistemas, con la gestión de permisos y accesos en portainer, esto es muy sencillo. En poco tiempo, veremos como los primeros van a flexibilizar enormemente la puesta en marcha de entornos y testeo, y los segundos van a poder evaluar diferentes soluciones saltándose el costoso tiempo de puesta en marcha.
Es decir, imaginemos que un desarrollador tiene el reporte de un cliente de que su aplicación da problemas en un tomcat versión X, o en una versión java X. Normalmente en un entorno tradicional, buscarías o montarías un servidor con ese entorno concreto, más lo segundo que lo primero ya que en un mismo servidor puede no ser buena idea mezclar versiones; Es decir, seguramente el proceso sería montar un Linux, configurar dentro un Tomcat, instalar Java, meter tu aplicación y probar… en entorno Docker simplemente es sustituir los procesos anteriores por un simple comando ( ver ejemplo).
Ir más allá
A partir del punto de partida anterior, las posibilidades son las que uno quiera alcanzar, en caso de pasar a orquestadores para garantizar una aplicación en producción, quizá una buena idea es empezar con Swarm, algo más sencillo de entender que kubernetes, o incluso como señalamos al principio del artículo, trastear con Rancher, una solución excepcional y muy sencilla de implantar.