Nella prima e nella seconda parte, abbiamo trattato i fondamenti dell'esecuzione di un container preparando il nostro sistema per la gestione dei container docker e cosa significa esattamente utilizzare un container docker rispetto ad altre tecnologie di virtualizzazione da un punto di vista tecnico. Quindi, nella terza parte, siamo passati alle immagini docker, abbiamo appreso le basi e creato il nostro primo contenitore Blocco note utilizzando WordPress o DokuWiki.
In questa quarta parte, vedremo come vengono create le immagini della finestra mobile e creeremo la nostra immagine personalizzata pronta per essere scaricata e condivisa con i nostri amici, colleghi e comunità.
Per questo tutorial, useremo l'immagine Whale Docker. La balena è la mascotte ufficiale di Docker e l'immagine della finestra mobile della balena ricorda il programma Cowsay che genera immagini ASCII di una mucca nel terminale con un messaggio. Può anche generare immagini utilizzando immagini prefabbricate di altri animali, come Tux the Penguin, la mascotte di Linux.
Introduzione ai file Docker
Nella parte precedente, ci siamo presentati al Docker Hub e abbiamo appreso che si tratta di una risorsa centralizzata basata su cloud per il rilevamento delle immagini dei container, la creazione di immagini e la distribuzione di tali immagini. Abbiamo anche appreso che un'immagine Docker è un'immagine multistrato sopra un'immagine di base. Detto questo, l'utilizzo di un'immagine di base elimina il fastidio di creare da zero un sistema operativo adatto per l'immagine Docker e ci dà la possibilità di personalizzare i livelli superiori in cui risiederà il nostro software.
Per creare un'immagine personalizzata utilizzando un'immagine di base, è necessario fornire al motore Docker le istruzioni su come installare e configurare pacchetti e file e anche alcune impostazioni che lo accompagnano. Queste istruzioni sono scritte in un semplice file di testo chiamato "dockerfile". I Dockerfile sono come le ricette che consegni a uno chef e lui/lei ti cucina un ottimo pasto. Questi file docker vengono scritti utilizzando una serie di passaggi semplici e descrittivi chiamati "istruzioni". Ogni istruzione crea un nuovo livello nella nostra immagine. Le istruzioni includono azioni come eseguire un comando, aggiungere un file o una directory, quale processo eseguire all'avvio di un contenitore dall'immagine, ecc. Questo processo è proprio come se imposti una serie di comandi in uno script di shell. Dopo aver richiesto la creazione di un'immagine, Docker legge il dockerfile, esegue le istruzioni e restituisce un'immagine finale.
Creazione di un'immagine Docker
Esistono due modi per creare l'immagine Docker personalizzata. Puoi compilarlo sul tuo computer oppure puoi utilizzare il Docker Hub di cui abbiamo parlato in precedenza. In questa parte impareremo come creare la nostra immagine Docker in locale e quindi pubblicarla nel registro Docker Hub.
Creazione locale utilizzando un Dockerfile
Creeremo un'immagine Docker personalizzata utilizzando l'immagine "Whale say" che è una piccola immagine Docker (basata su un'immagine Ubuntu) che quando la esegui, dice qualcosa che hai programmato per risponderti.
Per prima cosa, avvia un terminale e crea una nuova cartella digitando:
mkdir mywhale
Questa directory funge da "contesto" per la tua build. Il contesto significa semplicemente che contiene tutte le cose di cui hai bisogno per costruire con successo la tua immagine.
Entra nella tua nuova cartella con:
cd mywhale
e crea un Dockerfile nella cartella digitando:
touch Dockerfile
Ora dovresti vedere il Dockerfile vuoto che abbiamo creato se dai il comando 'll':
ll
$ ll
total 8.0K
-rw-rw-r-- 1 user user 0 23:26 Dockerfile
Aprilo con il tuo editor di testo preferito e aggiungi:
FROM docker/whalesay:latest
Questa prima riga di istruzioni, con la parola chiave FROM, dice a Docker su quale immagine si basa la tua immagine. Stai basando il tuo nuovo lavoro sull'immagine del racconto delle balene esistente.
La prossima istruzione che aggiungeremo darà alla nostra balena la possibilità di dire una fortuna. Per portare a termine questo compito, useremo il pacchetto fortune che è disponibile nei repository di Ubuntu (ricorda che l'immagine della balena è basata su un'immagine di Ubuntu). Il programma fortune ha un comando che stampa detti saggi che la nostra balena può dire.
Quindi, il primo passo è installarlo. Per fare ciò aggiungiamo la consueta istruzione di installazione di apt:
RUN apt -y update && apt -y install fortunes
Una volta che l'immagine ha il software di cui ha bisogno, istruisci il software da eseguire quando l'immagine viene caricata. Per fare ciò aggiungiamo la seguente istruzione:
CMD /usr/games/fortune -a | cowsay
La riga sopra indica al programma fortuna di inviare una citazione scelta a caso al programma cowsay
E abbiamo finito! Ora salva il file ed esci.
Puoi verificare cosa hai fatto eseguendo "cat Dockerfile" in modo che il tuo Dockerfile assomigli a questo:
cat Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
Ora che tutto (si spera) sembra a posto, è tempo di costruire la nostra Docker Image (non dimenticare il punto . al e del comando).:
docker build -t my-docker-whale .
Il comando precedente prende il Dockerfile nella cartella corrente e crea un'immagine chiamata "my-docker-Whale" sul tuo computer locale.
Puoi verificare che la tua immagine Docker sia effettivamente archiviata sul tuo computer con:
docker images
Quindi puoi eseguire la tua immagine Docker digitando quanto segue:
docker run my-docker-whale
Una volta eseguito, otterrai qualcosa come la seguente immagine
Pubblicazione dell'immagine Docker personalizzata su Docker Hub
La tua prossima opzione è pubblicare l'immagine Docker creata nel Docker Hub Repository. Per fare ciò, dovrai creare un account nella pagina Web di registrazione di Docker Hub in cui fornirai un nome, una password e un indirizzo e-mail per il tuo account. Devo anche sottolineare che il servizio Docker Hub è gratuito per le immagini docker pubbliche. Dopo aver creato il tuo account, puoi eseguire il push dell'immagine che hai creato in precedenza, per renderla disponibile per l'utilizzo da parte di altri.
Per farlo, avrai bisogno dell'ID e del TAG della tua immagine "my-docker-whale".
Esegui nuovamente il comando "immagini Docker" e annota l'ID e il TAG della tua immagine Docker ad es. a69f3f5e1a31.
Ora, con il seguente comando, prepareremo la nostra immagine Docker per il suo viaggio nel mondo esterno (la parte accountname del comando è il nome del tuo account nella pagina del profilo Docker Hube):
docker tag a69f3f5e1a31 accountname/my-docker-whale:latest
Esegui il comando "immagini docker" e verifica l'immagine appena taggata.
Quindi, utilizza il comando "docker login" per accedere all'hub Docker dalla riga di comando.
Il formato per il comando di accesso è:
docker login --username=yourhubusername [email protected]
Quando richiesto, inserisci la tua password e premi invio.
Ora puoi inviare la tua immagine al repository appena creato:
docker push accountname/my-docker-whale
Il completamento del comando precedente può richiedere del tempo a seconda della larghezza di banda di caricamento della connessione poiché carica qualcosa come 180ΜΒ di dati (nel nostro esempio). Una volta completato, puoi andare al tuo profilo su Docker Hub e controllare la tua nuova immagine.
Download della tua immagine personalizzata
Se desideri estrarre l'immagine dal repository Docker Hub, dovrai prima eliminare l'immagine originale dal tuo computer locale perché Docker rifiuterebbe di eseguire il pull dall'hub poiché le immagini locali e remote sono identiche.
Come ricorderete dalla parte precedente, per rimuovere un'immagine della finestra mobile, è necessario eseguire il comando "docker rmi". Puoi utilizzare un ID o il nome per rimuovere un'immagine:
docker rmi -f a69f3f5e1a31
Ora che l'immagine è stata eliminata, puoi estrarre e caricare l'immagine dal tuo repository utilizzando il comando "docker run" includendo il nome del tuo account da Docker Hub.
docker run accountname/my-docker-whale
Poiché in precedenza abbiamo eliminato l'immagine e non era più disponibile sul nostro sistema locale, Docker la scaricherà e la memorizzerà nella posizione designata.
Riepilogo
In questa parte, abbiamo imparato come creare un file Docker, scrivere alcune istruzioni di base e la build e l'immagine usandolo come ricetta. Abbiamo anche trattato le nozioni di base per inviare la nostra nuova immagine personalizzata al registro Docker Hub e per estrarla sul nostro computer locale. Nella parte successiva di questa serie di tutorial Docker, mostrerò come possiamo automatizzare la procedura di creazione delle immagini in modo da poter creare immediatamente immagini personalizzate ogni volta che ne abbiamo bisogno! Resta sintonizzato.