4 minuti
[Guida] Come creare un’immagine Docker personalizzata
La Docker Hub è piena di immagini da cui partire per creare container da eseguire nel nostro sistema: questi container ovviamente possiamo personalizzarli a nostro piacimento, per esempio installando i tool che usiamo di solito. In alcuni casi, quindi, potrebbe tornarci utile poter creare un’immagine partendo da uno di questi container; in questo modo poi potremo usarla per eseguire container basati su essa anche su altri dispositivi, invece di dover ogni volta fare il pull dell’immagine generale e configurarla.
N.B. Per semplicità in questa guida le modifiche consisteranno in una semplice creazione di un file di testo
Passo 1 - Pull dell’immagine
$ docker pull ubuntu
Quindi ora guardando le immagini presenti nel nostro sistema dovremmo ottenere qualcosa simile a questo:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest df5de72bdb3b 4 days ago 77.8MB
Passo 2 - Crezione e modifica del container
$ docker run -it --name ubuntu df5de72bdb3b /bin/bash
Con questo comando verrà creato il container e avviato automaticamente. Per quanto riguarda i parametri passati:
- -it è per poter interagire con il container tramite riga di comando
- –name ubuntu imposta il nome del container a ubuntu
- /bin/bash è il comando da eseguire
(Ovviamente per quanto riguarda nome e shell scegliete quelli che preferite)
Adesso che siamo dentro al container passiamo alle modifiche: spostiamoci nella home e creiamo il file modifiche.txt, e dopo possiamo uscire dal container:
$ cd home/
$ echo "container modificato" > modifiche.txt
$ exit
Passo 3 - Creazione dell’immagine dal container
Per prima cosa controlliamo la lista dei container nel nostro sistema:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64814f19d3f6 df5de72bdb3b "/bin/bash" 21 hours ago Exited (127) 4 minutes ago ubuntu
Ora usiamo il comando docker commit per salvare il container come immagine:
$ docker commit ubuntu
Controlliamo la lista delle immagini e dovremmo vedere una nuova immagine (con REPOSITORY e TAG non impostati), che è proprio quella appena creata:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> cebba0f4fdab 16 seconds ago 77.8MB
ubuntu latest df5de72bdb3b 5 days ago 77.8MB
Passo 4 - Tag dell’immagine
Qui usiamo il comando docker tag (ci serve l’ID dell’immagine, che possiamo prendere dall’output del comando precedente):
$ docker tag cebba0f4fdab ubuntu_mod
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_mod latest cebba0f4fdab 6 minutes ago 77.8MB
ubuntu latest df5de72bdb3b 5 days ago 77.8MB
Adesso proviamo subito a creare un container basato sull’immagine che abbiamo taggato. Prima eliminiamo quello da cui siamo partiti:
$ docker rm ubuntu
e poi avviamo quello nuovo:
$ docker run -it --name ubuntu_mod cebba0f4fdab /bin/bash
Ora che siamo dentro al container, possiamo verificare che tutto sia andato a buon fine spostandoci nella home e controllando che il file che avevamo creato sia effettivamente presente.
Passo 5 - Push dell’immagine nella Docker Hub
Se vogliamo usare l’immagine creata su altri dispositivi, possiamo caricarla in un repository nella Docker Hub (in questo modo poi potremo fare il pull ogni volta che vogliamo, in qualsiasi sistema che abbia Docker installato).
- Facciamo il login su https://hub.docker.com/
- Clicchiamo su Create Repository e impostiamo il nome e la descrizione (in questo caso per il nome ho scelto ubuntu_mod)
- Facciamo il login da terminale con
$ docker login -u [HubUsername]
ci verrà chiesta la password: inseriamola e, se tutto va bene, verrà restituito un messaggio che termina con Login Succeeded.
Adesso tagghiamo l’immagine per poter fare il push nel repository creato:
$ docker tag cebba0f4fdab [HubUsername]/ubuntu_mod:[tag]
# se non specifichiamo tag verrà usato quello di default "latest"
e finalmente facciamo il push nel repository:
$ docker push [HubUsername]/ubuntu_mod
Ora l’immagine sarà caricata e chiunque la potrà usare: basterà infatti visitare la pagina del repository e ci sarà il comando da eseguire per scaricarla, che in questo caso sarà:
$ docker pull [HubUsername]/ubuntu_mod:[tag]
# anche qui se omettiamo tag verrà usato "latest"
N.B. Possiamo anche decidere di non rendere pubblico il repository e impostarlo come privato direttamente dalla Docker Hub (con l’account base però abbiamo a disposizione soltanto un repo privato)
669 parole
2022-08-02 14:00