Caché con Nginx para los servicios de imágenes de Docker

Introducción

Buenas colegas, ahora que estoy empezando con toda la migración de mi infraestructura a Docker Swarm me he encontrado que cada vez que levanto un servicio en un nodo diferente hay que esperar a que la imagen del servicio sea descargada de alguno de los registros de internet.

Pues ahora me di a la tarea de por qué no cachear todas esas peticiones de manera local en mi red, así eliminaba la necesidad de usar el canal de internet para volver a bajar un recurso que ya se encontraba local, amén de la cantidad de banda ancha que tengamos.

Existen varios programas para hacer caché de paquetería de repositorios que soportaban ser de intermediarios con los registros externos de imágenes de Docker, como  Nexus  Artifactory o el propio  Registry de Docker, pero me encontraba con un detalle, cada vez que pedía una imagen, hasta que estos no lo tenían en su caché no lo enviaban al cliente, por consecuente, te quedabas como desesperado al no poder ver el progreso de descarga de las imágenes.

Por dicho detalle me decidí a usar a Nginx, que por defecto tiene soporte para realizar caché local a las peticiones, sería configurarlo para que funcionara como proxy reverso hacia algún servicio en internet, copiando localmente los  blob de las imágenes.

Por fin… manos a la obra

Aunque como tal la configuración de nginx no depende del Sistema Operativo, los comandos los basaré en Debian, pues es lo que actualmente uso.

Lo primero que tenemos que hacer es instalar nginx

Ahora solo es configurarle el sitio. Un detalle en este apartado, aunque lo podremos configurar completamente en su fichero  nginx.conf seguiré las pautas de Debian y crearé su sitio en  /etc/nginx/sites-enabled/

Ahora borraremos el sitio que viene por defecto

y creamos nuestro sitio  /etc/nginx/sites-enabled/docker  con algun editor de texto

le ponemos este contenido (que explicaré más adelante)

Explicando algunos fragmentos:

Con esa línea, se configura la caché, se dice que estará en la carpeta  /var/cache/nginx , que tendrá 2 niveles de carpetas y que ocupará un máximo de 100 Gb y que los datos dentro pueden estar inactivos por 8760 horas.

Aquí se establece una variable para definir si se cachea o no, en este caso es para no cachear las peticiones que contengan  manifests debido que es la que contiene la información de las capas. Aquí no es aconsejable cachearlas porque sino, por ejemplo, una imagen de tipo  latest no se actualizaría nunca mientra dure la cache.

En dependencia de lo anterior, cachea o no.

Finalizando

Ahora solo tenemos que reiniciar el servicio de nginx y tendremos nuestro servicio de caché de imágenes

Configurando Docker

Ahora solo bastaría configurar Docker para que haga uso de este registro, aunque podemos descargar directemente de él:

pero lo mejor es usarlo directamente, para eso vea el post Docker desde paises bloqueados en la última parte. Otro de los detalles es aumentar la seguridad del proxy usando SSL.

Y agregamos estas lineas

Espero les sirva. Esperen mas tutoriales mios.

(Visited 203 times, 1 visits today)
Sobre Luis Felipe Domínguez Vega 9 Artículos
Administrador de Sistemas y Programador entusiasta de tecnologías libres.

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*