Me doy cuenta de que ya hay una respuesta aceptada, sin embargo, quería ofrecer esta solución que creo que aborda más directamente la pregunta: "¿Cómo descargo una imagen de Docker sin usar Docker para realizar la recuperación?"
Tengo un problema similar, en el que las políticas de mi empresa requieren que proporcione a un equipo los archivos (normalmente a través de la URL) que quiero usar. Luego realizarán varios escaneos y auditorías, y luego colocarán los archivos en nuestra red de desarrollo desconectada. No puedo usar Docker para recuperar el archivo, luego exportarlo y entregarlo a ese equipo, por lo que la otra respuesta proporcionada no era una opción para mí.
Afortunadamente, encontré esta respuesta en StackOverflow, que recomienda usar una herramienta útil provista por samalba en GitHub: https://github.com/samalba/docker-registry-debug
Por supuesto, esa herramienta fue creada con Docker, y parte de la razón por la que la necesito es porque no tengo acceso abierto a Docker :). Entonces, como no tenía esa opción, explicaré los pasos que tomé aquí (todo esto es a partir de commit 05fffc4344fd6f866f84c403caae3ba81193dd45 de ese repositorio):
$ go get github.com/dustin/go-humanize
$ go build
$ ./docker-registry-debug --help
$ ./docker-registry-debug curlme docker ubuntu
La salida de ese comando es una línea de comando curl completa que se puede usar para descargar el archivo:
# Reading user/passwd from env var "USER_CREDS"
# No password provided, disabling auth
# Getting token from https://index.docker.io
# Got registry endpoint from the server: https://registry-1.docker.io
# Got token: signature=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=read
curl -i --location-trusted -I -X GET -H "Authorization: Token signature=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer
¡Espero que esto ayude a alguien más!