En el día a día de mi trabajo, me encuentro con un conjunto muy variado de ficheros Dockerfile que vienen a hacer lo mismo, pero de formas muy distintas. El fichero original se pasa de mano en mano, pervirtiéndose en cada paso y al final queda hecho un gran asco.
En mi trabajo se ha decidido por el uso de virtualización por contenedores usando Openshift. No es nada demasiado nuevo, puesto que ya usábamos Docker de manera habitual, pero ha habido alguna feature que nos ha hecho plantearnos el modo en el que hacemos las cosas, especialmente para las escrituras.
Finalmente ha sucedido: ha llegado el esperado lanzamiento de Debian Stretch. Como buen linuxero no me he podido resistir a hacer alguna instalación para probar, aunque solo sea como una máquina virtual. Su función, determinada por mi actual flujo de trabajo, va a ser como servidor de docker con docker-compose.
Muchos de nosotros tenemos un servidor en casa o en algún hosting. Como no tenemos mucho tráfico y cada servidor tiene un coste, acabamos llenándolo con un conjunto de servicios bastante grande. Esto supone un problema para actualizar el sistema operativo, suponiendo que los servicios no se molesten entre sí.
Hacía tiempo que esperaba ansiosamente la nueva versión de docker. La raíz de tanta expectación son las mejoras que la versión candidata anunciaba, especialmente el nuevo modelo de build. Se ha modificado los Dockerfile para que puedan generar varias imágenes en un solo fichero, algunas de ellas partiendo de otras.
Cuando construimos imágenes docker, muchas veces no somos conscientes del poder de la caché integrada. Si reordenamos algunas instrucciones y aplicamos algún truco, podemos evitarnos el hecho de reconstruir muchas de esas capas, llegando a reducir el tiempo de rebuild a prácticamente cero, siempre y cuando no hayan grandes cambios.
El otro día estaba haciendo un script de python que debía ejecutarse en un contenedor docker. A pesar de la cantidad de verbose que le puse, no era capaz de ver ningún texto cuando miraba los logs. Tras mucha búsqueda, finalmente encontré el culpable en la variable de entorno PYTHONUNBUFFERED.
El otro día me topé con un desarrollador que quiere desplegar sus contenedores Docker en el servidor de integración, pero no conoce la sintaxis del comando docker y prefiere una interfaz gráfica. Eso me llevó a investigar, buscando una opción bonita, funcional y ligera; al final, me topé con Portainer.
Muchas veces necesitamos herramientas para nuestro trabajo y no las usamos desde la misma máquina; otras veces no queremos instalar muchos paquetes en nuestra máquina. Tener una máquina virtual suele ser overkill para ejecutar algunos binarios. En este caso podemos tener nuestras imágenes docker listas para ser usadas según convenga.
Hemos hablado de generar nuestro contenido HTML estático con otras herramientas, y finalmente ha llegado la hora de servirlo. Normalmente, los ficheros que cambian tal y como vamos generando páginas son pocos y nos interesa copiarlo de forma remota, pero no podemos hacerlo con docker porque hacen falta dos servicios.