Opciones para sortear los nuevos límites de Docker Hub

En este artículo, te voy a hablar sobre qué cosas que podemos hacer para adaptarnos a los nuevos límites de pulls de Docker Hub.

Como seguramente ya sabes o si recién te estás enterado, Docker Hub estableció límites en la cantidad de pulls que se pueden hacer en un periodo de tiempo.

Los pulls son las descargas de imagenes que hacemos cada vez que se hace un...

$ docker pull image:tag

O (Si ya tienes descargada la imagen, no cuenta).

$ docker run ... image:tag

Los límites son los siguientes:

  • Usuario no autenticado: 100 pulls cada seis horas. Esto se basa en IP, así que es más grave la situación ya que si tenés una salida a Internet, esta cuota va a contar para todos.
  • Usuario autenticado, con una cuenta de Docker Hub gratuita: 200 pulls cada seis horas.

Algo a tener en cuenta es que si la imagen tiene un solo layer, cuenta como un pull, pero si la misma tiene varias, cada layer es una descarga.

Supuestamente hay una forma para saber cuantos pulls nos quedan, seas usuario autenticado o no, pero no funciona, sobre esto mismo, Docker documentó lo siguiente pero no funciona, si haces las consultas a esas URL, no devuelve nada.

Download rate limit
Download rate limit

¿Entonces?

Nuestra propia registry

Entonces nos ponemos a ver qué es lo que podemos hacer para vivir en paz con estos límites. Una opción es montar tu propia Docker Registry, esta opción es muy viable si todo el tiempo están haciendo builds o tienen algún sistema de CI/CD que depende de una registry. Hable sobre esta opción en este artículo.

Cómo desplegar nuestra propia Docker Registry
En este artículo, te muestro como desplegar una Docker Registry para que tengas el total control de tus imágenes.

Limitar el funcionamiento de los auto-updaters

Las soluciones como Watchtower pueden destruir tu cupo en un rato, ya que chequea cada cinco minutos si hay una imagen nueva de tu contenedor y actualiza el mismo. La recomendación acá es parar con el uso de estas herramientas o bien, limitarlas en cuanto al periodo que hace el chequeo por actualizaciones.

En Portainer, nuestro CEO hablo sobre esto en este artículo y yo hablé sobre Watchtower en este otro:

Cómo actualizar automáticamente tus contenedores en Docker
En este artículo, que podría ser un pique tranquilamente, te cuento como mantener actualizados tus contenedores con WatchTower.

La forma de alargar el tiempo de chequeo de actualizaciones y descargas, creo que es el approach más sensato para este escenario. Para poder hacerlo, solo debemos correr Watchtower de la siguiente manera:

$ docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e WATCHTOWER_POLL_INTERVAL=43200 \
    containrrr/watchtower 

La variable de entorno "WATCHTOWER_POLL_INTERVAL=43200" lo que hace es que revisa si hay nuevas imágenes cada 12 horas y como debe especificarse en segundos, son 43200 segundos.

En mi caso, lo tengo configurado así y corre cada 12 horas, podemos comprobarlo haciendo un...

$ docker logs <id-contenedor-watchtower>

La terminal nos devolverá esto:

time="2020-11-05T13:59:18Z" level=info msg="Starting Watchtower and scheduling first run: 2020-11-06 01:59:18 +0000 UTC m=+43200.959644801"

Usar otras registries públicas

quay.io

Otra opción es usar otras registries, una de ellas es quay.io, nos podemos abrir una cuenta, autenticarnos y traer imágenes desde esa registry sin ningún problema. Si queremos hostear imagenes, ahí sí que debemos desembolsar.

Quay
Quay is the best place to build, store, and distribute your containers. Public repositories are always free.

Gitlab

La registry de Gitlab es excelente opción para hostear nuestras imágenes, sobre todo si los proyectos los manejamos ahí mismo:

Package Registry | GitLab
Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

Github

Ellos también tienen la suya, no la he probado para serles honestos, así que me pueden dejar un comentario sobre la registry de Github y me cuentan que tal.

GitHub Packages Documentation - GitHub Docs
Learn to safely publish and consume packages, store your packages alongside your code, and share your packages privately with your team or publicly with the open source community. You can also automate your packages with GitHub Actions.

AWS

El gigante de la nube anunció que iba a lanzar un servicio muy similar al que tiene Docker Hub, aún no se sabe mucho más de lo que anunciaron, así que será cuestión de esperar a que lo lancen para ver:

Advice for customers dealing with Docker Hub rate limits, and a Coming Soon announcement | Amazon Web Services
Many container customers building applications use common software packages (e.g. operating systems, databases, and application components) that are publicly distributed as container images on Docker Hub. Docker, Inc. has announced that the Hub service will begin limiting the rate at which images ar…

Para ir cerrando

Al usuario de a pie, por decirlo de alguna manera, esto no le afecta ya que no está actualizando o haciendo builds todo el tiempo usando las imágenes de Docker Hub

Al que si le afecta es al que usa esto de manera intensa por su trabajo, aunque si lo llevamos a ese plano, tampoco me parece descabellado hacerse de un plan y olvidarse de estos límites.

Veo a Docker Hub como una herramienta más de trabajo, así como lo es tu computadora, que compraste o un plan de telefonía celular que pagas todos los meses.

Pero bueno, estas son algunas opciones si es que no te agradaron estos cambios y crees que te puede afectar en el día a día.

Me gustaría leer comentarios sobre qué opinan y también sobre otras registries que conozcan para alojar imágenes de contenedores.