🌈 Show me your DockerHub public images in your terminal

adriens - Jun 15 '22 - - Dev Community

❔ Intro

Docker Registry HTTP API V2 make is possible to query the registry in a comfortable way.

To showcase our public images, I wonder if I could :

  • Learn more about the API
  • Play with jq options
  • Showcase some content in a fun yet interesting way, from the terminal itself
  • Generate other kinds of creative ideas around this topic

πŸ’‘ The idea

To put in evidence the popularity of our images to the team that builds them,

I wanted to display a ranking they could play with on their workstations... right into their terminal

🧰 Tooling

Therefore I used the tool the team already uses on a daily basis to test & document our APIs :

  • httpie : "As easy as /aitch-tee-tee-pie/ pie Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. "
  • jq : "jq is like sed for JSON data"

... and for the fun and geek culture :

  • lolcat : "Rainbows and unicorns!"
http https://hub.docker.com/v2/repositories/optnc | \
     jq -r '"Image\tPulls", "-----------------------\t---", ( .results | sort_by(.pull_count) | reverse | .[] | "\(.name)\t\(.pull_count)")' | \
 column -t -s $'\t' | \
 lolcat -a -d 20
Enter fullscreen mode Exit fullscreen mode

🍿 Demo

Here is the final demo :

Find the movie source code just below (so you can replay or customize it) :

# πŸ€“ Let's see at optnc's public images on DockerHub πŸŽ‡

http https://hub.docker.com/v2/repositories/optnc | jq -r '"Image\tStars\tPulls", "-----------------------\t-------\t------", ( .results | sort_by(.pull_count) | reverse | .[] | "\(.name)\t\(.star_count)\t\(.pull_count)")' | column -t -s $'\t'

# 🎬 Now watching the spicy way 🌈

clear && http https://hub.docker.com/v2/repositories/optnc | \
     jq -r '"Image\tPulls", "-----------------------\t---", ( .results | sort_by(.pull_count) | reverse | .[] | "\(.name)\t\(.pull_count)")' | \
 column -t -s $'\t' | \
 lolcat -a -d 20

# πŸ™πŸ» Hopefully you enjoyed this short demo πŸ™‹
Enter fullscreen mode Exit fullscreen mode

πŸ”– Resources

πŸ“œ Drafts

Below drafts that helped create the final version πŸ‘‡

http https://hub.docker.com/v2/repositories/optnc | jq -r '.results|.[] | "\(.name)\t\(.star_count)"'  | column -t -s $'\t'
Enter fullscreen mode Exit fullscreen mode

Then the aligned version :

http https://hub.docker.com/v2/repositories/optnc | jq -r '"Image\tStars", "-----------------------\t-------", ( .results|.[] | "\(.name)\t\(.star_count)" )' | column -t -s $'\t'
Enter fullscreen mode Exit fullscreen mode

Sorting desc by stars :

http https://hub.docker.com/v2/repositories/optnc | jq -r '( .results | sort_by(.star_count) | reverse | .[] | "\(.name)\t\(.star_count)")' | column -t -s $'\t'
Enter fullscreen mode Exit fullscreen mode

Then with lolcat piping :

http https://hub.docker.com/v2/repositories/optnc | jq -r '"Image\tStars\tPulls", "-----------------------\t-------\t------", ( .results | sort_by(.pull_count) | reverse | .[] | "\(.name)\t\(.star_count)\t\(.pull_count)")' | column -t -s $'\t' | lolcat
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .