如何在docker命令行中的dockerregistry中find具有特定标记的docker图像?
我试图find一个泊坞窗图像的特定标签,我怎样才能在命令行? 我尽量避免全部下载并删除不需要的图像。
在官方Ubuntu版本https://registry.hub.docker.com/_/ubuntu/中有几个标签(发布),而当我在命令行中search
user@ubuntu:~$ docker search ubuntu | grep ^ubuntu ubuntu Official Ubuntu base image 354 ubuntu-upstart Upstart is an event-based replacement for ... 7 ubuntufan/ping 0 ubuntu-debootstrap 0
另外在命令行search
的帮助下https://docs.docker.com/engine/reference/commandline/search/ ,不知道如何工作?
是否有可能在docker search
命令?
如果我使用raw命令通过dockerregistryAPI进行search,则可以获取信息
$ curl https://registry.hub.docker.com//v1/repositories/ubuntu/tags | python -mjson.tool [ { "layer": "ef83896b", "name": "latest" }, ..... { "layer": "463ff6be", "name": "raring" }, { "layer": "195eb90b", "name": "saucy" }, { "layer": "ef83896b", "name": "trusty" } ]
据我所知,CLI不允许在存储库中search/列出标签。
但是,如果你知道你想要哪个标签,你可以通过添加一个冒号和图像名称来明确地拉动它: docker pull ubuntu:saucy
使用CoreOS jq
可以parsingjson数据。
所以就像你之前做的一样,看library/centos
admin@coreos ~/curl -s -S 'https://registry.hub.docker.com/v2/repositories/library/centos/tags/' | jq '."results"[]["name"]' |sort "6" "6.7" "centos5" "centos5.11" "centos6" "centos6.6" "centos6.7" "centos7.0.1406" "centos7.1.1503" "latest"
清洁v2 api现在可用,这就是我正在使用的例子。 我将构build一个简单的脚本docker_remote_tags
#!/usr/bin/bash curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort
启用:
$ ./docker_remote_tags library/centos "6" "6.7" "centos5" "centos5.11" "centos6" "centos6.6" "centos6.7" "centos7.0.1406" "centos7.1.1503" "latest"
参考:
jq
: https : jq
| apt-get install jq
这个脚本(docker-show-repo-tags.sh)应该适用于任何启用docker的主机。
#!/bin/sh # # Simple script that will display docker repository tags. # # Usage: # $ docker-show-repo-tags.sh ubuntu centos for Repo in $* ; do curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/" | \ sed -e 's/,/,\n/g' -e 's/\[/\[\n/g' | \ grep '"name"' | \ awk -F\" '{print $4;}' | \ sort -fu | \ sed -e "s/^/${Repo}:/" done
这是使用示例的输出:
$ docker-show-repo-tags.sh ubuntu centos ubuntu:14.04 ubuntu:14.04.3 ubuntu:15.04 ubuntu:15.10 ubuntu:latest ubuntu:trusty ubuntu:trusty-20151028 ubuntu:vivid ubuntu:wily ubuntu:wily-20151019 centos:5.11 centos:6.6 centos:6.7 centos:7.0.1406 centos:7.1.1503 centos:centos5.11 centos:centos6.6 centos:centos6.7 centos:centos7.0.1406 centos:centos7.1.1503
我编写了一个命令行工具来简化在我的PyTools GitHub仓库中searchDockerHub repo标签的工作。 使用各种命令行开关很简单,但最基本的是:
./dockerhub_show_tags.py repo1 repo2
它甚至可以作为docker的形象,可以采取多个回购:
docker run harisekhon/pytools dockerhub_show_tags.py centos ubuntu DockerHub repo: centos tags: 5.11 6.6 6.7 7.0.1406 7.1.1503 centos5.11 centos6.6 centos6.7 centos7.0.1406 centos7.1.1503 repo: ubuntu tags: latest 14.04 15.10 16.04 trusty trusty-20160503.1 wily wily-20160503 xenial xenial-20160503
如果你想embedded脚本,使用-q / –quiet来获得标签,就像普通的docker命令一样:
./dockerhub_show_tags.py centos -q 5.11 6.6 6.7 7.0.1406 7.1.1503 centos5.11 centos6.6 centos6.7 centos7.0.1406 centos7.1.1503
v2 API似乎使用某种分页方式,所以它不会返回所有可用的标签。 这在诸如python
(或者library/python
)等项目中是清晰可见的。 即使在快速阅读文档后 ,我也无法正确使用API(可能是错误的文档)。
然后我使用v1 API重写了脚本,仍然使用jq
:
#!/bin/bash repo="$1" if [[ "${repo}" != */* ]]; then repo="library/${repo}" fi url="https://registry.hub.docker.com/v1/repositories/${repo}/tags" curl -s -S "${url}" | jq '.[]["name"]' | sed 's/^"\(.*\)"$/\1/' | sort
完整的脚本可在以下urlfind: https : //bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.sh
我还写了一个改进版本(用Python),它汇集了指向相同版本的标签: https : //bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.py
前一篇文章的重新实现,使用Python over sed / awk
for Repo in $* ; do tags=$(curl -s -S "https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/") python - <<EOF import json tags = [t['name'] for t in json.loads('''$tags''')['results']] tags.sort() for tag in tags: print "{}:{}".format('$Repo', tag) EOF done
对于在dockerhub上使用Oauth持票人标记的脚本,请尝试此操作