volumen portus create docker

portus - docker registry volumen



¿Cómo puedo encontrar la imagen de Docker con una etiqueta específica en el registro de Docker en la línea de comandos del docker? (9)

Intento localizar una etiqueta específica para la imagen del acoplador, ¿cómo puedo hacerlo en la línea de comandos? Intento evitar descargar todo y eliminar las imágenes innecesarias.

En el lanzamiento oficial de Ubuntu https://registry.hub.docker.com/_/ubuntu/ hay varias etiquetas (versión para él), mientras que cuando lo busco en línea de comando

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

¿También en la ayuda de la search línea de comando https://docs.docker.com/engine/reference/commandline/search/ , no hay ninguna pista de cómo puede funcionar?

¿Es posible en el comando de docker search ?

Si uso un comando sin formato para buscar a través de la API de registro de Docker , entonces la información puede ser captada

$ 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" } ]



Cuando se utiliza CoreOS, jq está disponible para analizar datos JSON.

Así que como lo estabas haciendo antes, mirando a la 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"

La aplicación v2 limpiadora está disponible ahora, y eso es lo que estoy usando en el ejemplo. Construiré un script simple docker_remote_tags

#!/usr/bin/bash curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq ''."results"[]["name"]'' |sort

Habilita:

$ ./docker_remote_tags library/centos "6" "6.7" "centos5" "centos5.11" "centos6" "centos6.6" "centos6.7" "centos7.0.1406" "centos7.1.1503" "latest"

Referencia:

jq : https://stedolan.github.io/jq/ | apt-get install jq


Escribí una herramienta de línea de comandos para simplificar la búsqueda de etiquetas de reposición de DockerHub, disponible en mi repo de PyTools GitHub . Es simple de usar con varios interruptores de línea de comando, pero básicamente:

./dockerhub_show_tags.py repo1 repo2

Incluso está disponible como una imagen de acoplador y puede tomar varios repositorios:

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

Si desea incrustar en scripts, use -q / --quiet para obtener solo las etiquetas, como los comandos normales de 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


Este script (docker-show-repo-tags.sh) debería funcionar para cualquier host habilitado para 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

Esta es la salida para el ejemplo de uso:

$ 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


Hasta donde yo sé, la CLI no permite buscar / incluir etiquetas en un repositorio.

Pero si sabes qué etiqueta quieres, puedes extraerla explícitamente agregando dos puntos y el nombre de la imagen: docker pull ubuntu:saucy


La API v2 parece usar algún tipo de paginación, por lo que no devuelve todas las etiquetas disponibles. Esto es claramente visible en proyectos como python (o library/python ). Incluso después de leer rápidamente la documentación , no pude trabajar con la API correctamente (tal vez sea la documentación incorrecta).

Luego reescribí el script usando la API v1, y aún usando https://stedolan.github.io/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

El script completo está disponible en: https://bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.sh

También escribí (en Python) una versión mejorada que agrega etiquetas que apuntan a la misma versión: https://bitbucket.org/denilsonsa/small_scripts/src/default/docker_remote_tags.py


No me gustó ninguna de las soluciones anteriores porque A. requirieron bibliotecas externas que no tenía y no deseaba instalar. B. no obtuvo todas las páginas.

La aplicación Docker te limita a 10 elementos por solicitud (no encontró la manera de cambiarla) , esto hará un bucle sobre cada elemento "siguiente" y los obtendrá todos (para Python son 44 páginas, el otro puede ser más o menos ... depende )

Si realmente quieres spam, quítate | cut -d ''-'' -f 1 | cut -d ''-'' -f 1 desde la última línea y verás absolutamente todo.

url=https://registry.hub.docker.com/v2/repositories/library/redis/tags/ `# Initial url` ; / ( / while [ ! -z $url ]; do `# Keep looping until the variable url is empty` / >&2 echo -n "." `# Every iteration of the loop prints out a single dot to show progress as it got through all the pages (this is inline dot)` ; / content=$(curl -s $url | python -c ''import sys, json; data = json.load(sys.stdin); print(data.get("next", "") or ""); print("/n".join([x["name"] for x in data["results"]]))'') `# Curl the url and pipe the output to python, python will parse the JSON and print the very first line as the next url (it will leave it blank if there is no more pages) then continue to loop over the results extracting only the name; all will be stored in a variable called content` ; / url=$(echo "$content" | head -n 1) `# Lets get the first line of content which contains the next url for the loop to continue` ; / echo "$content" | tail -n +2 `# Print the content without the first line (yes +2 is counter intuitive)` ; / done; / >&2 echo `# Finally break the line of dots` ; / ) | cut -d ''-'' -f 1 | sort --version-sort | uniq;

Muestra de salida:

$ url=https://registry.hub.docker.com/v2/repositories/library/redis/tags/ `#initial url` ; / > ( / > while [ ! -z $url ]; do `#Keep looping until the variable url is empty` / > >&2 echo -n "." `#Every iteration of the loop prints out a single dot to show progress as it got through all the pages (this is inline dot)` ; / > content=$(curl -s $url | python -c ''import sys, json; data = json.load(sys.stdin); print(data.get("next", "") or ""); print("/n".join([x["name"] for x in data["results"]]))'') `# Curl the url and pipe the json to python, python will parse the JSON and print the very first line as the next url (it will leave it blank if there is no more pages) then continue to loop over the results extracting only the name; all will be store in a variable called content` ; / > url=$(echo "$content" | head -n 1) `#Lets get the first line of content which contains the next url for the loop to continue` ; / > echo "$content" | tail -n +2 `#Print the content with out the first line (yes +2 is counter intuitive)` ; / > done; / > >&2 echo `#Finally break the line of dots` ; / > ) | cut -d ''-'' -f 1 | sort --version-sort | uniq; .............. 2 2.6 2.6.17 2.8 2.8.6 2.8.7 2.8.8 2.8.9 2.8.10 2.8.11 2.8.12 2.8.13 2.8.14 2.8.15 2.8.16 2.8.17 2.8.18 2.8.19 2.8.20 2.8.21 2.8.22 2.8.23 3 3.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.504 3.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10 3.2.11 3.2.100 4 4.0 4.0.0 4.0.1 4.0.2 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 32bit alpine latest nanoserver windowsservercore

Si quieres la versión bash_profile :

function docker-tags () { name=$1 # Initial url url=https://registry.hub.docker.com/v2/repositories/library/$name/tags/ ( # Keep looping until the variable url is empty while [ ! -z $url ]; do # Every iteration of the loop prints out a single dot to show progress as it got through all the pages (this is inline dot) >&2 echo -n "." # Curl the url and pipe the output to python, python will parse the JSON and print the very first line as the next url (it will leave it blank if there is no more pages) # then continue to loop over the results extracting only the name; all will be stored in a variable called content content=$(curl -s $url | python -c ''import sys, json; data = json.load(sys.stdin); print(data.get("next", "") or ""); print("/n".join([x["name"] for x in data["results"]]))'') # Lets get the first line of content which contains the next url for the loop to continue url=$(echo "$content" | head -n 1) # Print the content without the first line (yes +2 is counter intuitive) echo "$content" | tail -n +2 done; # Finally break the line of dots >&2 echo ) | cut -d ''-'' -f 1 | sort --version-sort | uniq; }

Y simplemente llámalo: docker-tags redis

Muestra de salida:

$ docker-tags redis .............. 2 2.6 2.6.17 2.8 --trunc---- 32bit alpine latest nanoserver windowsservercore


Para una secuencia de comandos que funciona con tokens de portador Oauth en dockerhub, intente esto

https://.com/a/38277663/2765671


Re-impl de publicación anterior, usando Python sobre 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