日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/5/22 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker查看远端仓库的标签工具 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

最近入坑了docker,比如本地想要啟動(dòng)一個(gè)elastic容器的話,直接通過以下命令即可快速啟動(dòng)一個(gè)elasticsearch的實(shí)例。

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 復(fù)制代碼

執(zhí)行docker run命令最后一個(gè)參數(shù)是鏡像名稱,一般來說鏡像命名遵循Registry/Repository/Image:tag規(guī)則,各部分含義如下

  • Registry:公司統(tǒng)一的Docker Registry地址。
  • Repository:鏡像倉(cāng)庫(kù),用來管理一類鏡像。
  • Image:具體某鏡像的名稱。
  • tag:具體某鏡像的標(biāo)簽。

當(dāng)我們執(zhí)行上面的命令的時(shí)候,實(shí)際上會(huì)到默認(rèn)的Registry(docker hub)上去拉取Repository名為elasticsearch且Image名為elasticsearch的鏡像,鏡像可能會(huì)存在多個(gè)版本的tag,默認(rèn)情況下會(huì)拉取tag為latest的鏡像。這里Registry/Repository/Image的問題不大,都比較好找,但是一般情況下鏡像存在哪些版本用戶比較難找,之前筆者就是通過到dockerhub上,一頁一頁的翻看所有的tag,這種情況效率比較低。后來筆者在How to list all tags for a Docker image on a remote registry? 找到了一個(gè)算是比較好的答案,基本思路就是用docker官方提供的API接口對(duì)指定鏡像進(jìn)行查詢,對(duì)接口數(shù)據(jù)進(jìn)行處理后即可得到所有的tag,筆者覺得寫的比較有意思,就拿來分析一下,中間過程需要用到sed、awk等相關(guān)知識(shí)。 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}" 復(fù)制代碼

使用方式如下:

  • dockertags ubuntu : 列出ubuntu鏡像的所有tag
  • dockertags php apache : 列出所有包含apache的php鏡像的tag
  • 實(shí)現(xiàn)分析

    通過$# -lt 1判斷shell的參數(shù)是否少于一個(gè)($#表示shell的參數(shù)個(gè)數(shù)),如果少于一個(gè)就執(zhí)行usage函數(shù),輸出一些幫助信息并退出程序。如果大于等于一個(gè)參數(shù)則繼續(xù)執(zhí)行。

    $1: 表示shell中第1個(gè)參數(shù),dockertags ubuntu中$1就是ubuntu

    wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O -: 會(huì)將鏡像名稱拼接到查詢的API接口中,形成https://registry.hub.docker.com/v1/repositories/ubuntu/tags,通過wget訪問該接口得到查詢結(jié)果,-q參數(shù)會(huì)關(guān)閉wget冗余的輸出,-O -參數(shù)讓wget訪問的結(jié)果可以在命令行中呈現(xiàn),如下:

    接著通過sed來對(duì)得到j(luò)son進(jìn)行處理,sed -e 表示執(zhí)行腳本,后面可以跟多個(gè)-e參數(shù),每部分的解釋如下:

    • -e 's/[][]//g':表示將json結(jié)果中前后的中括號(hào)去掉
    • -e 's/"//g':表示將json結(jié)果中的雙引號(hào)去掉
    • -e 's/ //g':表示將json中的空格去掉

    sed處理后的結(jié)果如下:

    sed處理完后,通過tr將json的右大括號(hào)替換成換行符,結(jié)果如下:

    最后通過awk指定通過-F參數(shù)指定各個(gè)字段分隔符為:將每行數(shù)據(jù)分隔成三個(gè)部分:

    '{print $3}'直接輸出第三列結(jié)果即為我們需要的鏡像的tag列表,如下:

    此時(shí)tags變量中已經(jīng)保存了所有與當(dāng)前鏡像相關(guān)的tag列表了,

    如果shell中的第二個(gè)參數(shù)不為空,就表示需要進(jìn)一步的根據(jù)第二個(gè)參數(shù)進(jìn)行過濾,比如dockertags php apache,此時(shí)$2就是apache,我們需要過濾出php鏡像所有的tag中包含apache的tag,直接通過管道加上grep即可,echo "${tags}" | grep "$2",先做變量替換,在執(zhí)行命令。最后輸出所有滿足條件的tag列表。

    總結(jié)

    以上是生活随笔為你收集整理的Docker查看远端仓库的标签工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。