在使用 Docker 的时候,我发现有个需求很常见但是又不那么容易实现,那就是查看一个 image 的 tag 有哪些。例如我想要一个 Golang 的 Docker 镜像,最新的 Golang 已经发布到了 1.12 了,我不确定是否 docker 官方的镜像是否已经更新了,或者更新到什么程度,是 1.12.1 还是 1.12.2。

在以前,我有这个需要的时候都是去 http://hub.docker.com 上搜索对应的镜像详情,然后查看 tag 列表,但是很明显,这确实很麻烦,所以,我就找了找有什么命令可以帮助,然而,没有发现更好的,一条比较有用的就是这个了:

  1. # wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | sed \
  2. -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk \
  3. -F: '{print $3}'

但是,也很明显呀,你没法简单记住,当然,你可以把他封装成 shell 函数配置在 .bashrc 中:

  1. function dockertags() {
  2. wget -q https://registry.hub.docker.com/v1/repositories/"$@"/tags -O - | sed \
  3. -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk \
  4. -F: '{print $3}'
  5. }

这也可以挺方便得使用:

  1. # dockertags centos
  2. latest
  3. 5
  4. 5.11
  5. 6
  6. 6.10
  7. 6.6
  8. 6.7
  9. 6.8
  10. 6.9
  11. ... ...

但是,我因为有自己的工具包,所以我不想用这种方式,于是乎,我就在我的工具包中加入了这个功能,如果你想体验一把,可以尝试这么操作:

  1. # go get -u github.com/lauzoo/laugo/cmd/laudocker
  2. # go install github.com/lauzoo/laugo/cmd/laudocker
  3. # laudocker tags golang | head
  4. latest
  5. 1
  6. 1-alpine
  7. 1-alpine3.5
  8. 1-alpine3.6
  9. 1-alpine3.7
  10. 1-alpine3.8
  11. 1-alpine3.9
  12. 1-cross
  13. 1-jessie

轻松加愉快得完成了事情。

Reference