资讯专栏INFORMATION COLUMN

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

Kerr1Gan / 1706人阅读

摘要:执行命令最后一个参数是镜像名称,一般来说镜像命名遵循规则,各部分含义如下公司统一的地址。镜像仓库,用来管理一类镜像。具体某镜像的标签。最后输出所有满足条件的列表。

背景

最近入坑了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?
](https://stackoverflow.com/que...,基本思路就是用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 "}" "
"  | awk -F: "{print $3}"`

if [ -n "$2" ]; then
    tags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
使用方式如下:

dockertags ubuntu : 列出ubuntu镜像的所有tag

dockertags php apache : 列出所有包含apache的php镜像的tag

实现分析

通过$# -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.c...,通过wget访问该接口得到查询结果,-q参数会关闭wget冗余的输出,-O -参数让wget访问的结果可以在命令行中呈现,如下:

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

-e "s/[][]//g" :表示将json结果中前后的中括号去掉

-e "s/"//g" :表示将json结果中的双引号去掉

-e "s/ //g":表示将json中的空格去掉

sed处理后的结果如下:

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

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27671.html

相关文章

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

    摘要:执行命令最后一个参数是镜像名称,一般来说镜像命名遵循规则,各部分含义如下公司统一的地址。镜像仓库,用来管理一类镜像。具体某镜像的标签。最后输出所有满足条件的列表。 背景 最近入坑了docker,比如本地想要启动一个elastic容器的话,直接通过以下命令即可快速启动一个elasticsearch的实例。 docker run -d -p 9200:9200 -p 9300:9...

    idisfkj 评论0 收藏0
  • Jenkins集成Docker镜像实现自动发布

    摘要:集群环境的部署方式使用集群管理工具通过版本新增文件实现滚动升级容器等同于应用的部署 1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 —— gitl实现应用打包 —— jenkins本地把应用程序打包进Docker镜像 ...

    defcon 评论0 收藏0
  • 都9102年了,还不会Docker?10分钟带你从入门操作到实战上手

    摘要:联调测试,无需依赖他人。针对以上问题,有两种解决方法,一个是自己搭建私有服务,另一个是用云服务的镜像管理平台如阿里云的容器镜像服务。利用,先对阿里云的服务进行登录。推送后,就能在阿里云的仓库上看到这个镜像。 Docker简述 Docker是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windo...

    sf_wangchong 评论0 收藏0
  • 初识docker

    摘要:什么是是一个用来装应用的容器,就像被子可以放水,笔筒可以放笔一样公司开发,开源,托管在历史开源轮融资万轮万理解思想集装箱标准化运输方式存储方式接口隔离隔离了进程和资源解决了什么问题我本地运行没问题啊操作系统命令不一致,版本不一致,版本不一致 Docker https://www.docker.com 什么是Docker 是一个用来装应用的容器,就像被子可以放水,笔筒可以放笔一样 Do...

    weakish 评论0 收藏0
  • Git workflow 详谈

    摘要:在合并完成后,可以执行将自己开发的功能发布至中心仓库。特性分支工作流基于特性的分支工作流,可以为每个特性做隔离,避免对中心仓库主干代码造成影响。修复分支,用于对线上主分支代码的及时修复,待修复完成后,合并进入主分支,再并入开发分支。 作为一名工程师, Git 在日常开发中是不可或缺的工具。这里详细介绍几种比较常用的基于 Git 的工作流模型, 以便于团队协作的规范化和效率提升。 中心化...

    funnyZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<