β 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 likesed
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
πΏ 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 π
π Resources
- Docker HUB API (beta)
- Docker Registry HTTP API V2
- Great collection of DockerHub Docker Registry API call Examples
π 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'
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'
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'
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