Docker查看远端仓库的标签工具

栏目: 编程工具 · 发布时间: 6年前

内容简介:最近入坑了docker,比如本地想要启动一个elastic容器的话,直接通过以下命令即可快速启动一个elasticsearch的实例。执行当我们执行上面的命令的时候,实际上会到默认的Registry(docker hub)上去拉取Repository名为elasticsearch且Image名为elasticsearch的镜像,镜像可能会存在多个版本的tag,默认情况下会拉取tag为latest的镜像。这里Registry/Repository/Image的问题不大,都比较好找,但是一般情况下镜像存在哪些版

最近入坑了docker,比如本地想要启动一个elastic容器的话,直接通过以下命令即可快速启动一个elasticsearch的实例。

docker run -d -p 9200:9200 \
    -p 9300:9300 \
    --name elasticsearch001 -h elasticsearch001 \
    -e cluster.name=lookout-es \
    -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
    -e xpack.security.enabled=false \
    elasticsearch/elasticsearch
复制代码

执行 docker run 命令最后一个参数是镜像名称,一般来说镜像命名遵循 Registry/Repository/Image:tag 规则,各部分含义如下

  • Registry:公司统一的Docker Registry地址。
  • Repository:镜像仓库,用来管理一类镜像。
  • Image:具体某镜像的名称。
  • tag:具体某镜像的标签。

当我们执行上面的命令的时候,实际上会到默认的Registry(docker hub)上去拉取Repository名为elasticsearch且Image名为elasticsearch的镜像,镜像可能会存在多个版本的tag,默认情况下会拉取tag为latest的镜像。这里Registry/Repository/Image的问题不大,都比较好找,但是一般情况下镜像存在哪些版本用户比较难找,之前笔者就是通过到dockerhub上,一页一页的翻看所有的tag,这种情况效率比较低。后来笔者在 How to list all tags for a Docker image on a remote registry? 找到了一个算是比较好的答案,基本思路就是用 docker 官方提供的API接口对指定镜像进行查询,对接口数据进行处理后即可得到所有的tag,笔者觉得写的比较有意思,就拿来分析一下,中间过程需要用到sed、awk等相关知识。 dockertags.sh代码如下:

#!/bin/bash
function usage() {
cat << HELP

dockertags  --  list all tags for a Docker image on a remote registry.

EXAMPLE: 
    - list all tags for ubuntu:
       dockertags ubuntu

    - list all php tags containing apache:
       dockertags php apache

HELP
}



if [ $# -lt 1 ]; then
	usage
	exit
fi

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

if [ -n "$2" ]; then
	tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
复制代码

使用方式如下:

  1. dockertags ubuntu : 列出ubuntu镜像的所有tag
    Docker查看远端仓库的标签工具
  2. dockertags php apache : 列出所有包含apache的 php 镜像的tag
    Docker查看远端仓库的标签工具

实现分析

通过 $# -lt 1 判断 shell 的参数是否少于一个( $# 表示shell的参数个数),如果少于一个就执行usage函数,输出一些帮助信息并退出程序。如果大于等于一个参数则继续执行。

$1 : 表示shell中第1个参数, dockertags ubuntu 中$1就是ubuntu

wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O - : 会将镜像名称拼接到查询的API接口中,形成https://registry.hub.docker.com/v1/repositories/ubuntu/tags,通过wget访问该接口得到查询结果, -q 参数会关闭wget冗余的输出, -O - 参数让wget访问的结果可以在命令行中呈现,如下:

Docker查看远端仓库的标签工具

接着通过sed来对得到json进行处理,sed -e 表示执行脚本,后面可以跟多个-e参数,每部分的解释如下:

-e 's/[][]//g'
-e 's/"//g'
-e 's/ //g'

sed处理后的结果如下:

Docker查看远端仓库的标签工具

sed处理完后,通过tr将json的右大括号替换成换行符,结果如下:

Docker查看远端仓库的标签工具

最后通过awk指定通过-F参数指定各个字段分隔符为 : 将每行数据分隔成三个部分:

Docker查看远端仓库的标签工具
'{print $3}'

直接输出第三列结果即为我们需要的镜像的tag列表,如下:

Docker查看远端仓库的标签工具

此时tags变量中已经保存了所有与当前镜像相关的tag列表了,

如果shell中的第二个参数不为空,就表示需要进一步的根据第二个参数进行过滤,比如 dockertags php apache ,此时 $2 就是apache,我们需要过滤出php镜像所有的tag中包含apache的tag,直接通过管道加上grep即可, echo "${tags}" | grep "$2" ,先做变量替换,在执行命令。最后输出所有满足条件的tag列表。


以上所述就是小编给大家介绍的《Docker查看远端仓库的标签工具》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析

算法设计与分析

张德富 / 2009-8 / 36.00元

《算法设计与分析》主要取材于算法设计与分析领域的经典内容,并介绍了算法设计的发展趋势。内容主要包括非常经典的算法设计技术,例如递归与分治、动态规划、贪心、回溯、分支限界、图算法,也包括了一些高级的算法设计主题,例如网络流和匹配、启发式搜索、线性规划、数论以及计算几何。在算法分析方面,介绍了概率分析以及最新的分摊分析和实验分析方法。在算法的理论方面,介绍了问题的下界、算法的正确性证明以及NP完全理论......一起来看看 《算法设计与分析》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码