创建一个命令来显示Docker镜像的标签列表
简而言之
可以在dockerhub上找到docker镜像的标签,但每页显示的标签不算太多,要不断翻页去寻找有点麻烦。
以前可以通过调用dockerhub的API(https://registry.hub.docker.com/v1/repositories/镜像名/tags)来获取标签列表,非常方便。
但最近好像无法使用了。
我尝试访问dockerhub并使用开发者工具进行调查后发现,现在可以通过(https://hub.docker.com/v2/repositories/library/镜像名/tags)来获取。
我创建了一个使用这个方法来获取docker镜像标签列表的shell脚本。
Shell脚本的代码
#!/bin/sh
# 2022/09/18
# 問い合わせ回数を取得
num=$(echo $@ | tr ' ' '\n' | grep '\-n' | tr -d '\-n')
# ページ番号を取得
page=$(echo $@ | tr ' ' '\n' | grep '\-page' | tr -d '\-page')
# 指定されたページ番号に問い合わせ
if [ -n "${page}" ]; then
curl -s "https://hub.docker.com/v2/repositories/library/${1}/tags/?page_size=100&page=${page}" |
sed -e 's/,/\n/g' |
grep '\"name\":' |
sed -e 's/:/ /g' -e 's/\"//g' |
awk '{print $2}'
# 処理終了
exit 0
fi
# 問い合わせ回数が指定されていなければデフォルトで1とする
if [ -z "${num}" ]; then
num=1
fi
# 1ページ目から指定された回数のページまでを表示
seq ${num} | while read -r line; do
curl -s "https://hub.docker.com/v2/repositories/library/${1}/tags/?page_size=100&page=${line}" |
sed -e 's/,/\n/g' |
grep '\"name\":' |
sed -e 's/:/ /g' -e 's/\"//g' |
awk '{print $2}'
done
安装方法
将其放置在PATH已配置的目录中,或者将配置目录的路径添加到PATH中。
・~/binというディレクトリを作成し、本スクリプトを配置
・~/binのPATHを通す
2) 给予执行权限
$ chmod +x docker-tags
用法
- オプションなし
$ docker-tags イメージ名
# 1ページ分表示される
- 表示ページ数を指定
$ docker-tags イメージ名 -n10
# 10ページ分表示される
- 表示するページ番号を指定
$ docker-tags イメージ名 -page10
# 10ページ目のみ表示される
使用举例
作为例子,我将尝试在”ubuntu”上进行搜索。
$ docker-tags ubuntu
latest
bionic-20220902
bionic
18.04
rolling
kinetic-20220830
kinetic
jammy-20220815
jammy
focal-20220826
focal
devel
bionic-20220829
22.10
22.04
20.04
・
・
・
额外1:搜索图像名称
可以在Docker Hub上进行镜像名称的搜索,也可以使用命令来实现。
使用docker search命令。
$ docker search キーワード
我以”ubuntu”为例进行搜索。
如果路径中有斜杠”/”,斜杠后面的部分为镜像名。
$ docker search ubuntu
ubuntu Ubuntu is a Debian-based Linux operating sys… 14955 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 288 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 93 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 59
open-liberty Open Liberty multi-architecture images based… 54 [OK]
ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 46 [OK]
ubuntu/apache2 Apache, a secure & extensible open-source HT… 41
ubuntu/mysql MySQL open source fast, stable, multi-thread… 36
ubuntu/squid Squid is a caching proxy for the Web. Long-t… 32
kasmweb/ubuntu-bionic-desktop Ubuntu productivity desktop for Kasm Workspa… 31
ubuntu/prometheus Prometheus is a systems and service monitori… 29
ubuntu/bind9 BIND 9 is a very flexible, full-featured DNS… 27
ubuntu/postgres PostgreSQL is an open source object-relation… 19
ubuntu/redis Redis, an open source key-value store. Long-… 11
ubuntu/kafka Apache Kafka, a distributed event streaming … 11
ubuntu/prometheus-alertmanager Alertmanager handles client alerts from Prom… 7
ubuntu/grafana Grafana, a feature rich metrics dashboard & … 6
ubuntu/memcached Memcached, in-memory keyvalue store for smal… 5
ubuntu/zookeeper ZooKeeper maintains configuration informatio… 5
ubuntu/telegraf Telegraf collects, processes, aggregates & w… 4
ubuntu/dotnet-deps Chiselled Ubuntu for self-contained .NET & A… 3
ubuntu/cortex Cortex provides storage for Prometheus. Long… 3
ubuntu/cassandra Cassandra, an open source NoSQL distributed … 2
ubuntu/loki Grafana Loki, a log aggregation system like … 0
额外选项2:同时显示支持的架构
如果您使用M1Mac等设备,还需要关注其所支持的架构。
以下是修改了上述脚本以便能够以”标签名:架构名”形式输出的代码。
只需要一个选择:仅限以中文为母语的重新表达。
只考虑动就好的想法……只要动一下就行,只要动一下……
使用jq命令之类的工具能否更加巧妙地写出来呢……
#!/bin/sh
# 2022/09/18
# 問い合わせ回数を取得
num=$(echo $@ | tr ' ' '\n' | grep '\-n' | tr -d '\-n')
# ページ番号を取得
page=$(echo $@ | tr ' ' '\n' | grep '\-page' | tr -d '\-page')
# 指定されたページ番号に問い合わせ
if [ -n "${page}" ]; then
curl -s "https://hub.docker.com/v2/repositories/library/${1}/tags/?page_size=100&page=${page}" |
sed -e 's/,/\n/g' |
grep -E 'architecture|\"name\":' |
tac |
tr -d '\n' |
sed -e 's/\"images\"//g' -e 's/\"name\":/\n/g' -e 's/{\"architecture\"//g' -e 's/\"//g' -e 's/\[://g' -e 's/:/ /g' |
awk '{print $1":"$2,$3,$4,$5,$6,$7,$8,$9,$10}' |
tac |
sed -e 's/ *$//g' -e 's/ /, /g' -e 's/^:$//'
# 処理終了
exit 0
fi
# 問い合わせ回数が指定されていなければデフォルトで1とする
if [ -z "${num}" ]; then
num=1
fi
# 1ページ目から指定された回数のページまでを表示
seq ${num} | while read -r line; do
curl -s "https://hub.docker.com/v2/repositories/library/${1}/tags/?page_size=100&page=${line}" |
sed -e 's/,/\n/g' |
grep -E 'architecture|\"name\":' |
tac |
tr -d '\n' |
sed -e 's/\"images\"//g' -e 's/\"name\":/\n/g' -e 's/{\"architecture\"//g' -e 's/\"//g' -e 's/\[://g' -e 's/:/ /g' |
awk '{print $1":"$2,$3,$4,$5,$6,$7,$8,$9,$10}' |
tac |
sed -e 's/ *$//g' -e 's/ /, /g' -e 's/^:$//' |
grep -vE '^$'
done
※我正在使用 tac 命令。这是一个从文件尾部输出的命令,相当于 cat 命令的反向。
如果显示命令未找到:tac,请适时进行安装。
对于 Mac 用户,请执行 brew install coreutils。
作为一个例子,我会尝试在”Ubuntu”上进行搜索。
$ docker-tags ubuntu
latest:s390x, riscv64, ppc64le, arm64, arm, amd64
bionic-20220902:s390x, ppc64le, 386, arm64, arm, amd64
bionic:s390x, ppc64le, 386, arm64, arm, amd64
18.04:s390x, ppc64le, 386, arm64, arm, amd64
rolling:s390x, riscv64, ppc64le, arm64, arm, amd64
kinetic-20220830:s390x, riscv64, ppc64le, arm64, arm, amd64
kinetic:s390x, riscv64, ppc64le, arm64, arm, amd64
jammy-20220815:s390x, riscv64, ppc64le, arm64, arm, amd64
jammy:s390x, riscv64, ppc64le, arm64, arm, amd64
focal-20220826:s390x, riscv64, ppc64le, arm64, arm, amd64
focal:s390x, riscv64, ppc64le, arm64, arm, amd64
devel:s390x, riscv64, ppc64le, arm64, arm, amd64
bionic-20220829:s390x, ppc64le, 386, arm64, arm, amd64
22.10:s390x, riscv64, ppc64le, arm64, arm, amd64
22.04:s390x, riscv64, ppc64le, arm64, arm, amd64
20.04:s390x, riscv64, ppc64le, arm64, arm, amd64
・
・
・