Si eres cubano, probablemente te vaya a parecer obvio. Gracias a una pésima interpretación de las leyes norteamericanas, DockerHub está bloqueado para Cuba. En algunos casos se puede incluso abrir el sitio pero descargar imágenes es imposible. Siendo Docker una de las tecnologías más influyentes en el campo de la informática de la última década, es impensable que no se haya abierto paso en la comunidad de desarrolladores cubanos, así que el poder descargar imagenes de Docker se convierte en una necesidad primordial para muchos.
¿Qué han hecho los cubanos para obtener imágenes hasta ahora? Pues desde utilizar VPNs para poder acceder directamente al servicio hasta guardar meticulosamente grandes archivos de imágenes para distribuir entre colegas y guardar para tiempos en los que no se pueden permitir estar online. Hay alternativas como havanacontainers que ofrecen hasta cierto punto bastante libertad pero para un novato, tener que configurar el servicio de Docker para que utilice otros registry crea un poco de resistencia al principio. Además, debido a la mala calidad de la mayoría de las conexiones en Cuba, es muy probable que la descarga de una imagen pare en cualquier momento debido a desconexión, falta de fluido eléctrico, conejos incendiarios y otros demonios.
Debido a todo esto, me pareció que lo más sensato era proveer a los desarrolladores cubanos de una herramienta que tratará de resolver el problema, y así, después de algunos cafés nació DockerImageSave que, utilizando un servidor fuera de Cuba descarga imágenes de DockerHub comprimidas en .zip
DockerImageSave viene empaquetada en un solo binario, siendo así bien fácil de instalar ya que sólo necesitas descargarla y ejecutarla.
sudo snap install docker-image-save
nota: debido a que a snap no le gustan los nombres en CamelCase, si instalas usando snap el nombre del comando cambia de DockerImageSave a docker-image-save
Como ejemplo vamos a descargar la imagen de Alpine linux con el tag 3.9
DockerImageSave -i alpine:3.9
Este comando descargará la imagen en el directorio actual.
___ _ _ ___ _ _
| . \ ___ ___ | |__ ___ _ _ | |._ _ _ ___ ___ ___ | . \ ___ _ _ _ ._ _ | | ___ ___ _| | ___ _ _
| | |/ . \/ | '| / // ._>| '_> | || ' ' |<_> |/ . |/ ._> | | |/ . \| | | || ' || |/ . \<_> |/ . |/ ._>| '_>
|___/\___/\_|_.|_\_\\___.|_| |_||_|_|_|<___|\_. |\___. |___/\___/|__/_/ |_|_||_|\___/<___|\___|\___.|_|
<___'
Using server: https://-----------------------------/
Downloading image: alpine:3.9
🆗 Image downloaded on remote host
🆗 Image saved and compressed on remote host
https://---------------------------------/download/alpine:3.9.tar.zip
Downloading https://-----------------------------/download/alpine:3.9.tar.zip...
200 OK
Download saved to /home/akiel/alpine_3.9.tar.zip
¿Necesitas más detalles? Siempre puedes echarle un ojo a la ayuda. ¿Tu conexión falló? La aplicación está preparada para recuperarse.
Pues ahora tengo un fichero... ¿Cómo le hago para que me aparezca cuando hago docker images
? Sencillo:
$ unzip alpine_3.9.tar.zip
Archive: alpine_3.9.tar.zip
inflating: alpine:3.9.tar
$ docker load -i alpine\:3.9.tar
f1b5933fe4b5: Loading layer [==================================================>] 5.796MB/5.796MB
Loaded image: alpine:3.9
Ahora cuando ejecutes docker images
debe aparecer la imagen de alpine:3.9 en la lista:
alpine 3.9 055936d39205 13 months ago 5.53MB
Para evitar descargar constantemente las mismas imágenes la aplicación hace una caché de lo que ya se ha descargado anteriormente. Debido a esto, mientras la cache no se limpie, las imágenes seguirán siendo las mismas. Creo que ya deben entender por qué es una mala idea utilizar latest como etiqueta. Técnicamente estarían descargando exactamente la misma imagen. En la práctica, mientras más granular puedan llevar el tag de la imagen que quieran descargar, mejor.
Hay problemas que no deberían existir. Problemas que son completamente artificiales ya que están creados entre otras cosas por la estrechez de la mente de algunas personas. Este es uno de esos. Espero que esta aplicación ayude a la comunidad de desarrolladores en Cuba y otros países con el mismo problema a poder saltar la censura y ser un poquito más parte del mundo.
¿Quieres contribuir? La aplicación es de código abierto. Haces un Pull Request en GitHub o registras un Issue y ya estás ayudando a todos.
¿Tu arquitectura/sistema no se encuentra dentro de la lista de descargas? Crea un Issue en GitHub y trataré de construirla cuanto antes.