❔ 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
Top comments (2)
Post used to help improve
shields.io
:🐛 Docker stars broken (invalid) ⭐ #8314
Are you experiencing an issue with...
shields.io
Docker stars shield is broken :
While docker repo is ok :
hub.docker.com/r/optnc/api-transit...
Can be reproduced on any docker image with
/docker/stars/
Maybe point to this API
https://hub.docker.com/v2/repositories/optnc
which makes it possible to get the stars withstar_count
attribute