Nella sezione precedente abbiamo creato un’immagine, vogliamo caricarla nel nostro spazio su DockerHub.

Prerequisito per affrontare questo passaggio è l’essere in possesso di un account su hub.docker.com.

Come prima cosa è necessario eseguire il login utilizzando la cli di docker con le credenziali dell’account di Docker hub, ovvero con il proprio docker id.

docker login

Una volta fatto ciò il comando da eseguire è semplicemente “docker image push” dove vanno specificate tre cose:

  1. Username dell’account o organizzazione su cui pubblicare il repository dell’immagine e su cui si detiene facoltà di scrittura
  2. Nome dell’immagine
  3. Tag ( in caso di assenza del tag, verrà attribuito di default il tag latest)

Il punto tre suggerisce il motivo per il quale la versione latest non è per forza l’ultima.

Io ho creato un organizzazione su dockerhub.com e l’ho chiamata docketutorialit.
Supponiamo di voler caricare l’immagine con il tag 0.1, eseguiamo quindi:

docker image push dockertutorialit/prima-immagine:0.1 

Ottenendo questo output:

The push refers to repository [docker.io/dockertutorialit/prima-immagine]
An image does not exist locally with the tag: dockertutorialit/prima-immagine

La prima riga ci informa su quale repository stiamo tentando il caricamento, ed è esattamente quello che ci aspettavamo. Ma ricevo un errore poiché non c’è nessuna immagine che fa match con la coppia repository tag ce gli abbiamo passato.

Da qui si rende necessario un ultimo accorgimento, ovvero quello di creare un tag per l’immagine dotato dello username o organizzazione su cui fare il push.
Se non dotiamo l’immagine di questa informazione il caricamento fallirà perché cercherà il repository tra quelli locali utilizzando la stringa esatta utilizzata per il push, nel nostro caso  “dockertutorialit/prima-immagine:0.1” ma senza trovarla.
Eseguiamo quindi:

docker image build -t dockertutorialit/prima-immagine:0.1 .

E poi nuovamente il push:

docker image push dockertutorialit/prima-immagine:0.1 

Ottenendo un output di questo tipo:

The push refers to repository [docker.io/dockertutorialit/prima-immagine]
7444ea29e45e: Mounted from library/alpine 
0.1: digest: sha256:a7f1e970e3492248427e5146c70b45f3b1809504e4c00d728c1c74c2aad7aa53 size: 528

E ci siamo! per verificare che il tutto funzioni, cancelliamo le immagini in locale e scarichiamo prima-immagine dal nostro account.

docker image  pull dockertutorialit/prima-immagine

Questa immagine non verrà scaricata perché non abbiamo fatto il push del tag latest !!

Ho fatto questa “imboscata” evidenziare la pericolosità dell’utilizzo del tag latest. Oltre al fatto di non puntare sempre all’ultima versione disponibile e non avere controllo su quale versione verrà scaricata in un’invocazione futura, non è neanche detto che il tag latest esista!

Ora che siamo consapevoli del latest-hell, scarichiamo la versione dell’immagine relativa al tag di cui abbiamo fatto il push, ovvero il tag 0.1.

docker image  pull dockertutorialit/prima-immagine:0.1

Ottenendo questo output:

0.1: Pulling from dockertutorialit/prima-immagine
486039affc0a: Already exists 
Digest: sha256:a7f1e970e3492248427e5146c70b45f3b1809504e4c00d728c1c74c2aad7aa53
Status: Downloaded newer image for dockertutorialit/prima-immagine:0.1
docker.io/dockertutorialit/prima-immagine:0.1

L’immagine questa volta è stata scaricata con successo e ha lo stesso image id che avevamo in precedenza (7f17e8021e95).

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
dockertutorialit/prima-immagine         0.1                 7f17e8021e95        49 minutes ago      4.41MB


Prosegui su: Dockerfile: Tutti i comandi

Immagine:  Canoe rosse sul bacino de mare – it.freepik.com