deployment - library - download docker image
Docker: compruebe la versiĆ³n de la imagen de registro privado (5)
¿Qué comandos de CLI necesito usar para verificar si la imagen en mi registro de acoplador privado es una versión más nueva que la que se está ejecutando actualmente en mi servidor?
Por ejemplo, tengo un contenedor que ejecuté utilizando docker run -d my.domain.com:5000/project1
y me gustaría saber si está desactualizado.
AFAIK, esto no es posible ahora mismo.
Lo único que veo es sacar el registro para verificar si hay una nueva versión de su imagen (entonces tendría una ID diferente a la imagen almacenada localmente):
docker pull your/image:tag
Pero sí, eso significaría buscar las nuevas imágenes (si las hay).
Si echas un vistazo a la documentación de la API de registro , verás que si no te molesta el guión, puedes obtener esta información sin descargarla, obteniendo las etiquetas de imagen y verificando si la ID devuelta para el la etiqueta coincide con la ID de la imagen local que tiene con la misma etiqueta.
Dicho esto, tener algo para "buscar actualizaciones" integrado en la CLI del docker
sería una buena adición.
Brownie señala a @mbarthelemy y @amuino que me pusieron en la pista. A partir de eso, pude elaborar el siguiente script bash que otros pueden encontrarle útil. Solo comprueba si la etiqueta en el registro es diferente del contenedor que se está ejecutando actualmente.
#!/bin/bash
# ensure running bash
if ! [ -n "$BASH_VERSION" ];then
echo "this is not bash, calling self with bash....";
SCRIPT=$(readlink -f "$0")
/bin/bash $SCRIPT
exit;
fi
REGISTRY="my.registry.com:5000"
REPOSITORY="awesome-project-of-awesomeness"
LATEST="`wget -qO- http://$REGISTRY/v1/repositories/$REPOSITORY/tags`"
LATEST=`echo $LATEST | sed "s/{//g" | sed "s/}//g" | sed "s//"//g" | cut -d '' '' -f2`
RUNNING=`docker inspect "$REGISTRY/$REPOSITORY" | grep Id | sed "s//"//g" | sed "s/,//g" | tr -s '' '' | cut -d '' '' -f3`
if [ "$RUNNING" == "$LATEST" ];then
echo "same, do nothing"
else
echo "update!"
echo "$RUNNING != $LATEST"
fi
Incluso cuando no hay ningún comando, puede usar la API para buscar etiquetas en el registro y compararlas con lo que está ejecutando.
$ curl --silent my.domain.com:5000/v1/repositories//project1/tags | grep latest
{"latest": "116f283e4f19716a07bbf48a562588d58ec107fe6e9af979a5b1ceac299c4370"}
$ docker images --no-trunc my.domain.com:5000/project1
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
my.domain.com:5000 latest 64d935ffade6ed1cca3de1b484549d4d278a5ca62b31165e36e72c3e6ab8a30f 4 days ago 583.2 MB
Al comparar los id, puede saber que no está ejecutando la última versión.
No sé si esto funciona como se anuncia. Solo un truco rápido que acabo de armar. Pero esto al menos te dará un pequeño impulso sobre cómo se puede hacer esto.
#!/bin/bash
container=$1
imageid=$(docker inspect --format ''{{.Config.Image}}'' ${container})
echo "Running version from: $(docker inspect --format ''{{.Created}}'' ${container})"
echo "Image version from: $(docker inspect --format ''{{.Created}}'' ${imageid})"
Ejemplo de salida:
[root@server ~]# sh version_check.sh 9e500019b9d4
Running version from: 2014-05-30T08:24:08.761178656Z
Image version from: 2014-05-01T16:48:24.163628504Z
No estoy seguro acerca de la version
pero si se refiere a la tag
de la imagen, se puede verificar fácilmente a través de la API de registro v2 . Tenga en cuenta que, en el contexto de las etiquetas Docker, la etiqueta no tiene nada que ver con la versión del software .
Use el comando curl en CLI
curl <docker_host_ip>:<docker_host_port>/v2/<repository_name>/tags/list
Para obtener una lista de repositorios insertados en el registro privado, use
curl <docker_host_ip>:<docker_host_port>/v2/_catalog