Binary Coffee

Descargando im√°genes de Docker al estilo cubano

docker github open_source

¬ŅPor qu√©?

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

Cómo usarla

DockerImageSave viene empaquetada en un solo binario, siendo así bien fácil de instalar ya que sólo necesitas descargarla y ejecutarla.

Instalar

Desde Github

  1. En la p√°gina de releases en Github https://github.com/jadolg/DockerImageSave/releases escoge el binario correspondiente a tu sistema operativo (Linux/Windows/MacOS(Darwin))
  2. En el caso de Linux y MacOS dale permisos de ejecución al fichero

Desde snapcraft

  1. 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

Descargar una imagen

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.

Importar la imagen en mi docker local

Pues ahora tengo un fichero... ¬ŅC√≥mo le hago para que me aparezca cuando hago docker images? Sencillo:

  1. Descomprime el fichero
    $ unzip alpine_3.9.tar.zip
    Archive:  alpine_3.9.tar.zip
    inflating: alpine:3.9.tar
    
  2. Carga el resultado en docker
    $ 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

Una nota con respecto al uso de la etiqueta latest

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.

Conclusión

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.

Opiniones
noavatar
Con tener la variable de entorno HTTP_PROXY configurada en la terminal donde se ejecuta la aplicación debe ser suficiente.
noavatar
como puedo descargar cuando me encuentro atras de un proxy ??
noavatar
Cograt¬īs al final algo que se puede usar como se debe... Thank¬īs
noavatar
Sharing ahora mismo! Ahora con todo esto de las VPN que no funcionan del todo bien es la salavación misma.
noavatar
Que bueno encontrar algo asi
noavatar
Gracias tu explicacion esta genial, apenas he comenzado a dar mis primeros pasos en docker y una de las cosas con las que más trabajo he pasado es poder descargar las imágenes, supe de esta herramienta leyendo un artículo en sysadmindecuba.
noavatar
Genial jadolg!
noavatar
Excelente artículo @jadolg. Estaré encantado de recomendar esta herramienta a cuantas personas lo necesiten. Otra forma de acceder a Docker Hub sin utilizar VPNs es usando este espejo chino http://f1361db2.m.daocloud.io