Cuando creamos un nuevo ImageStream que apunta a una imagen, podemos activar una funcionalidad que periódicamente comprueba si la imagen ha cambiado, y en caso afirmativo, actualiza el ImageStream para que apunte a la nueva imagen. Por defecto, el periodo de comprobación es de 15 minutos.

En primer lugar, vamos a crear una imagen Docker y la voy a subir a mi cuenta de Docker Hub. Para ello vamos a usar el fichero Dockerfile:

FROM centos:centos7
CMD echo 'Hola, esta es la versión 1 de la imagen' && exec sleep infinity

Para crear la imagen y subirla ejecuto las siguientes instrucciones:

docker login
docker build -t josedom24/imagen-prueba .
docker push josedom24/image-prueba

A continuación creamos el ImageStream apuntando a dicha image, con la opción --scheduled=true que es el parámetro que nos permite monitorizar la imagen original:

oc import-image imagen-prueba:latest --from=docker.io/josedom24/imagen-prueba:latest --scheduled=true --confirm

Comprobamos el id de la imagen a la que apunta:

oc describe is imagen-prueba
...
latest
  updates automatically from registry docker.io/josedom24/imagen-prueba:latest

  * docker.io/josedom24/imagen-prueba@sha256:9577a5de1c8e4590c3e538207f3edb74968e3d119e435cceeeef9853528ab761

Ahora desplegamos esta imagen y comprobamos la versión:

oc new-app imagen-prueba --name=app-prueba

oc logs deploy/app-prueba
Hola, esta es la versión 1 de la imagen

Ahora vamos a modificar el fichero Dockerfile y vamos a volver a subir la imagen con el mismo nombre y la misma etiqueta. Cambiamos el mensaje del fichero Dockerfile para que ponga versión 2, y volvemos a generar la imagen y subirla:

docker build -t josedom24/imagen-prueba .
docker pull josedom24/image-prueba   

Cuando se ha subido la imagen ya vemos que se le ha asignado otro id:

latest: digest: sha256:20ed24d87a2f66eab7ddae859fe43ad101bea5b28b2101947e1468f24c52470d size: 529

Y esperamos los 15 minutos…

Y podemos comprobar que el ImageStream se ha actualizado:

oc describe is imagen-prueba
...
latest
  updates automatically from registry docker.io/josedom24/imagen-prueba:latest

  * docker.io/josedom24/imagen-prueba@sha256:20ed24d87a2f66eab7ddae859fe43ad101bea5b28b2101947e1468f24c52470d
      39 seconds ago
    docker.io/josedom24/imagen-prueba@sha256:9577a5de1c8e4590c3e538207f3edb74968e3d119e435cceeeef9853528ab761
      15 minutes ago

Y que se ha actualizado el despliegue:

oc get deploy,rs,pod
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app-prueba   1/1     1            1           14m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/app-prueba-57896bf5     0         0         0       14m
replicaset.apps/app-prueba-59f8bd66f7   0         0         0       14m
replicaset.apps/app-prueba-5c8494ffc7   1         1         1       60s

NAME                              READY   STATUS    RESTARTS   AGE
pod/app-prueba-5c8494ffc7-nk7ft   1/1     Running   0          60s

Y por tanto tenemos desplegado la nueva versión de la imagen:

oc logs deploy/app-prueba
Hola, esta es la versión 2 de la imagen

Updated: