背景

最近入坑了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 << HELPdockertags  --  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 apacheHELP
}if [ $# -lt 1 ]; thenusageexit
fiimage="$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" ]; thentags=` echo "${tags}" | grep "$2" `
fi
echo "${tags}"
复制代码

使用方式如下:

  1. dockertags ubuntu : 列出ubuntu镜像的所有tag
  2. 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.com/v1/repositories/ubuntu/tags,通过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列表。

Docker查看远端仓库的标签工具相关推荐

  1. docker看远程仓库镜像_查看Docker镜像仓库中镜像的所有标签

    用 Docker 的人都知道,我们在查询远端镜像仓库中镜像的时候,在命令行只能看到镜像名,说明等信息,而看不到标签.因此,如果我想要查看镜像有哪些标签,就只能通过网页的方式查看,比如通过 https: ...

  2. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  3. Docker push命令推送镜像到远端仓库

    这里以dockercloud.io仓库为例,首先在docker配置文件中配置远端仓库地址,传送门如下: Docker运维与实战(一)-Docker的前世今生 1.登录远端仓库 $ docker log ...

  4. AntDeploy工具一键发布镜像到腾讯云Docker私有镜仓库

    AntDeploy工具功能简介 支持docker一键部署(支持netcore) 支持iis一键部署(支持netcore和framework) 支持windows服务一键部署(支持netcore和fra ...

  5. Docker笔记-04 仓库

    文章目录 1 DockerHub公共镜像市场 1.1 登录 1.2 基本操作 1.3 自动创建 2 第三方镜像市场 2.1 查看镜像 2.2 下载镜像 3 搭建本地私有仓库 3.1 使用registr ...

  6. Docker教程-8-DockerHub仓库及私有仓库的使用

    转自:Docker教程-8-DockerHub仓库及私有仓库的使用,更优阅读体验:http://www.kongzid.com/ 目录 1.Docker Hub镜像仓库的使用 1.1 注册账号并登录 ...

  7. Docker学习(三)-----Docker镜像和仓库了解以及加速

    镜像(Image)是构建容器的基础,镜像是一种分层结构的文件系统.我们可以从仓库(Repository)中下载镜像,而仓库又保存在Registry中,Docker Hub是Docker官方提供的Reg ...

  8. 使用Docker镜像和仓库(4)

    创建一个基本的Docker容器:$ sudo docker run -i -t --name another_container_mum ubuntu /bin/bash root@b415b317a ...

  9. Docker——docker-registry私有仓库集群构建

    摘要 随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库.目前常用的两种仓库:公共仓库和私有仓库.最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传 ...

最新文章

  1. 每日一皮:当项目完工,开发进行演示时
  2. RedrawWindow, UpdateWindow,InvalidateRect 用法
  3. pku 2418 Hardwood Species 字典树
  4. Pycharm远程调试之ssh remote debug(二)
  5. 前端学习(2885):如何短时间内实现v-for 搭建环境 业务模块设计
  6. mysql 查询前一个月数据_mysql 查询当天、本周,本月,上一个月的数据......
  7. 知乎“下沉”,快手“上游”
  8. 机器学习的数学基础——线性代数篇(一)
  9. 利用ViewPager实现app的启动画面
  10. python 读取最新阿里云RDS数据库备份并下载
  11. [洛谷]P3374 【模板】树状数组 1 (#树状数组)
  12. 3dsmax怎么添加uv坐标_3dmax缺少贴图坐标怎么添加uvmap修改器
  13. 如何参与linux内核开发
  14. Amy-Tabb机器人世界手眼标定(4、Windows)
  15. 中国大学MOOC-陈越、何钦铭-数据结构-2020夏期末考试
  16. adb unlock
  17. 细谈中医------疥,疮,痘的治疗方法
  18. 大会议程正式公布!FBEC2020暨第五届金陀螺奖全面升级,报名从速!
  19. 【5分钟代码练习】01—导航栏鼠标悬停效果的实现
  20. 基于Prometheus+Grafana搭建监控平台-(2)实现监控elink服务器EIMServer

热门文章

  1. 动态规划面试常考:最短路径和
  2. 【Sphinx】MySQL+Sphinx 全文检索的使用和测试
  3. 【ASM 翻译系列第二弹:ASM 12C 版本新特性】
  4. 压力不是来自于任务本身,而是任务在大脑中的堵塞,带来的焦虑和心理的抵触(转)...
  5. chrome无法登陆账号,显示操作超时的解决方案
  6. Windows 8实例教程系列 - 理解应用框架
  7. 用户体验思考之UI面试
  8. 《Sibelius 脚本程序设计》连载(三十四) - 4.4 DateTime
  9. java基础学习(一)方法
  10. Raspberry Pi 4B 安装 PyTorch