Tenemos tres maneras de crear recursos ImageStream:

Creación de ImageStream con new-app

Cada vez que creamos un nuevo despliegue con la instrucción oc new-app se crea una objeto ImageStream que apunta a la imagen utilizada o construida. Por ejemplo:

oc new-app bitnami/nginx --name=web3
--> Found container image 336e5d1 (16 hours old) from Docker Hub for "bitnami/nginx"
...
--> Creating resources ...
    imagestream.image.openshift.io "web3" created

Si obtenemos los recursos ImageStream:

oc get is
NAME   IMAGE REPOSITORY                                                     TAGS     UPDATED
web3   default-route-openshift-image-registry.apps-crc.testing/nginx/web3   latest   About a minute ago

Como vemos el nuevo ImageStream ha sido nombrado con el nombre que hemos puesto a la aplicación, y en este caso lo ha etiquetado con el mismo nombre de etiqueta (latest) que la imagen original:

Si obtenemos información del recurso:

oc describe is web3
...
Image Repository:	default-route-openshift-image-registry.apps-crc.testing/nginx/web3
Image Lookup:		local=false
Unique Images:		1
Tags:			1

latest
  tagged from bitnami/nginx

  * bitnami/nginx@sha256:a9d1db64126e8554584e2e665bf59f7f3fbb8d2eb128b769b8289f63dae4d065
      3 minutes ago

Observamos que tenemos una imagen con una etiqueta y encontramos el nombre de la imagen a la que estamos apuntando, cuyo ID se corresponde con la imagen original:

nginx_docker

Finalmente podemos comprobar que tenemos la imagen en nuestro registro interno:

oc get images|grep nginx
...
sha256:a9d1db64126e8554584e2e665bf59f7f3fbb8d2eb128b769b8289f63dae4d065   bitnami/nginx@sha256:a9d1db64126e8554584e2e665bf59f7f3fbb8d2eb128b769b8289f63dae4d065

Creación de ImageStream con import-image

Otra manera de crear recursos ImageStream es usando el comando import-image. En este caso indicamos el nombre de la ImageStream y la imagen a la que apunta. En este ejemplo vamos a utilizar el mismo nombre y vamos a apuntar a otra imagen indicando otra etiqueta:

oc import-image web4:latest --from=docker.io/bitnami/apache --confirm

Es necesario poner la opción --confirm cuando creamos por primera vez un objeto ImageStream.

Otra forma de hacerlo sería creando antes un nuevo objeto ImageStream y luego importando la imagen:

oc create is web4
oc import-image web4:latest --from=docker.io/bitnami/apache

En este caso hemos creado el ImageStream web4:latest:

oc describe is web4
...
Unique Images:		1
Tags:			1

latest
  tagged from docker.io/bitnami/apache

  * docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a
      About a minute ago

Si miramos los ID de las imágenes bitnami/apache en Docker Hub podemos comprobar que hemos apuntado la versión latest. Además vemos que la versión 2.4.57 es la misma imagen:

apache

Podríamos crear un nuevo tag apuntando a la misma imagen dentro de la ImageStream web4:

oc import-image web4:2.4.57 --from=docker.io/bitnami/apache:2.4.57

oc describe is web4
...
Unique Images:		1
Tags:			2

latest
  tagged from docker.io/bitnami/apache

  * docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a
      4 minutes ago

2.4.57
  tagged from docker.io/bitnami/apache:2.4.57

  * docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a
      1 second ago

Y también podríamos crear un tag apuntando a otra versión que corresponde a una imagen diferente:

oc import-image web4:2.4.56 --from=docker.io/bitnami/apache:2.4.56

oc describe is web4
...
Unique Images:		2
Tags:			3

latest
  tagged from docker.io/bitnami/apache

  * docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a
      7 minutes ago

2.4.57
  tagged from docker.io/bitnami/apache:2.4.57

  * docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a
      3 minutes ago

2.4.56
  tagged from docker.io/bitnami/apache:2.4.56

  * docker.io/bitnami/apache@sha256:13f1a1b11c4a661d9689949b107378773ff23c5ac748dd9ce61b69d1c6804108
      2 seconds ago

Para ver las imágenes que tenemos en registro interno, ejecutamos:

oc get images|grep apache
sha256:13f1a1b11c4a661d9689949b107378773ff23c5ac748dd9ce61b69d1c6804108   docker.io/bitnami/apache@sha256:13f1a1b11c4a661d9689949b107378773ff23c5ac748dd9ce61b69d1c6804108
sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a   docker.io/bitnami/apache@sha256:275637c0d0d82c0f87b2269d1871d6a7ad1e81e8960f5ec23fe599e456618b1a

Para terminar, podríamos usar este ImageStream para desplegar una nueva aplicación:

oc new-app web4:2.4.57 --name apache1

Creación de ImageStream con fichero YAML

La definición de un objeto ImageStream es muy sencilla. Por ejemplo, podemos tener guardada la definición en el fichero is.yaml:

apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
  name: citas
spec:
  tags:
  - name: "1.0"
    from:
      kind: DockerImage
      name: josedom24/citas-backend:v1

Y simplemente lo creamos, ejecutando:

oc apply -f is.yaml

oc get is
NAME    IMAGE REPOSITORY                                                      TAGS                   UPDATED
citas   default-route-openshift-image-registry.apps-crc.testing/nginx/citas   1.0                    30 seconds ago
web2   default-route-openshift-image-registry.apps-crc.testing/httpd/web2     latest                 58 minutes ago
web3    default-route-openshift-image-registry.apps-crc.testing/nginx/web3    latest                 51 minutes ago
web4    default-route-openshift-image-registry.apps-crc.testing/nginx/web4    2.4.56,2.4.57,latest   21 minutes ago

Actualizado: