成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Docker查看遠(yuǎn)端倉(cāng)庫(kù)的標(biāo)簽工具

Kerr1Gan / 1815人閱讀

摘要:執(zhí)行命令最后一個(gè)參數(shù)是鏡像名稱,一般來說鏡像命名遵循規(guī)則,各部分含義如下公司統(tǒng)一的地址。鏡像倉(cāng)庫(kù),用來管理一類鏡像。具體某鏡像的標(biāo)簽。最后輸出所有滿足條件的列表。

背景

最近入坑了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

執(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?
](https://stackoverflow.com/que...,基本思路就是用docker官方提供的API接口對(duì)指定鏡像進(jìn)行查詢,對(duì)接口數(shù)據(jù)進(jìn)行處理后即可得到所有的tag,筆者覺得寫的比較有意思,就拿來分析一下,中間過程需要用到sed、awk等相關(guān)知識(shí)。
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/"http://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

實(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.c...,通過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/"http://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列表。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27671.html

相關(guān)文章

  • Docker查看遠(yuǎn)端倉(cāng)庫(kù)標(biāo)簽工具

    摘要:執(zhí)行命令最后一個(gè)參數(shù)是鏡像名稱,一般來說鏡像命名遵循規(guī)則,各部分含義如下公司統(tǒng)一的地址。鏡像倉(cāng)庫(kù),用來管理一類鏡像。具體某鏡像的標(biāo)簽。最后輸出所有滿足條件的列表。 背景 最近入坑了docker,比如本地想要啟動(dòng)一個(gè)elastic容器的話,直接通過以下命令即可快速啟動(dòng)一個(gè)elasticsearch的實(shí)例。 docker run -d -p 9200:9200 -p 9300:9...

    idisfkj 評(píng)論0 收藏0
  • Jenkins集成Docker鏡像實(shí)現(xiàn)自動(dòng)發(fā)布

    摘要:集群環(huán)境的部署方式使用集群管理工具通過版本新增文件實(shí)現(xiàn)滾動(dòng)升級(jí)容器等同于應(yīng)用的部署 1. 思路&流程 Jenkins集成Docker鏡像實(shí)現(xiàn)自動(dòng)發(fā)布與Jenkins發(fā)布mavne項(xiàng)目思路一樣總體流程 為:Jenkins 拉去遠(yuǎn)端源碼 —— gitl實(shí)現(xiàn)應(yīng)用打包 —— jenkins本地把應(yīng)用程序打包進(jìn)Docker鏡像 ...

    defcon 評(píng)論0 收藏0
  • 都9102年了,還不會(huì)Docker?10分鐘帶你從入門操作到實(shí)戰(zhàn)上手

    摘要:聯(lián)調(diào)測(cè)試,無需依賴他人。針對(duì)以上問題,有兩種解決方法,一個(gè)是自己搭建私有服務(wù),另一個(gè)是用云服務(wù)的鏡像管理平臺(tái)如阿里云的容器鏡像服務(wù)。利用,先對(duì)阿里云的服務(wù)進(jìn)行登錄。推送后,就能在阿里云的倉(cāng)庫(kù)上看到這個(gè)鏡像。 Docker簡(jiǎn)述 Docker是一種OS虛擬化技術(shù),是一個(gè)開源的應(yīng)用容器引擎。它可以讓開發(fā)者將應(yīng)用打包到一個(gè)可移植的容器中,并且該容器可以運(yùn)行在幾乎所有l(wèi)inux系統(tǒng)中(Windo...

    sf_wangchong 評(píng)論0 收藏0
  • 初識(shí)docker

    摘要:什么是是一個(gè)用來裝應(yīng)用的容器,就像被子可以放水,筆筒可以放筆一樣公司開發(fā),開源,托管在歷史開源輪融資萬輪萬理解思想集裝箱標(biāo)準(zhǔn)化運(yùn)輸方式存儲(chǔ)方式接口隔離隔離了進(jìn)程和資源解決了什么問題我本地運(yùn)行沒問題啊操作系統(tǒng)命令不一致,版本不一致,版本不一致 Docker https://www.docker.com 什么是Docker 是一個(gè)用來裝應(yīng)用的容器,就像被子可以放水,筆筒可以放筆一樣 Do...

    weakish 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<