Lavorare con i container Docker

Introduzione

Docker è un popolare strumento di containerizzazione utilizzato per fornire alle applicazioni software un filesystem che contiene tutto ciò di cui hanno bisogno per eseguirsi. L’utilizzo dei contenitori Docker garantisce che il software si comporti allo stesso modo, indipendentemente da dove viene distribuito, perché il suo ambiente di esecuzione è rigorosamente coerente.

In questo tutorial, forniremo una breve panoramica della relazione tra le immagini Docker e i contenitori Docker. Successivamente, esamineremo più nel dettaglio come eseguire, avviare, fermare ed eliminare i contenitori.

Panoramica

Possiamo pensare a un’immagine Docker come a un modello inerte utilizzato per creare i contenitori Docker. Le immagini di solito partono da un filesystem di base e aggiungono modifiche al filesystem e i relativi parametri di esecuzione in strati ordinati e in sola lettura. A differenza di una distribuzione Linux tipica, un’immagine Docker contiene normalmente solo il minimo indispensabile per l’esecuzione dell’applicazione. Le immagini non hanno stato e non cambiano. Piuttosto, costituiscono il punto di partenza per i contenitori Docker.

Le immagini prendono vita con il comando docker run, che crea un contenitore aggiungendo uno strato di lettura-scrittura in cima all’immagine. Questa combinazione di strati in sola lettura sovrapposti con uno strato di lettura-scrittura è nota come un sistema di file di unione. Quando viene apportata una modifica a un file esistente in un contenitore in esecuzione, il file viene copiato dallo spazio in sola lettura allo strato di lettura-scrittura, dove vengono applicate le modifiche. La versione nello strato di lettura-scrittura nasconde il file originale ma non lo rimuove. Le modifiche nello strato di lettura-scrittura esistono solo all’interno di un’istanza di contenitore individuale. Quando viene eliminato un contenitore, tutte le modifiche vengono perse a meno che non vengano prese misure per preservarle.

Come lavorare con i contenitori Docker

  1. Crea due contenitori Docker
  2. Riavvia il primo contenitore
  3. Elimina entrambi i contenitori

Lavorare con i contenitori

Ogni volta che si utilizza il comando docker run, viene creato un nuovo contenitore dall’immagine specificata. Questo può essere una fonte di confusione, quindi diamo un’occhiata con alcuni esempi:

Passaggio 1: Creare Due Contenitori

Il seguente comando docker run creerà un nuovo contenitore utilizzando l’immagine base ubuntu. -t ci fornirà un terminale, e -i ci permetterà di interagire con esso. Faremo affidamento sul comando predefinito nel file Docker dell’immagine di base di Ubuntu, bash, per entrare in una shell.

  1. docker run -ti ubuntu

Il prompt della riga di comando cambia per indicare che siamo all’interno del contenitore come utente root, seguito dall’ID del contenitore di 12 caratteri.

Faremo una modifica inserendo del testo nella directory /tmp del contenitore, quindi utilizzeremo cat per verificare che sia stato salvato con successo.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

Ora, usciamo dal contenitore.

  1. exit

I container Docker smettono di funzionare non appena il comando che hanno emesso è completato, quindi il nostro container si è fermato quando siamo usciti dalla shell di bash. Se eseguiamo docker ps, il comando per visualizzare i container in esecuzione, non vedremo il nostro.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Se aggiungiamo il flag -a, che mostra tutti i container, fermi o in esecuzione, allora il nostro container comparirà nell’elenco:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

Quando il container è stato creato, è stato assegnato il suo ID di container e un nome generato casualmente. In questo caso, 11cc47339ee1 è l’ID del container e small_sinoussi è il nome generato casualmente. ps -a mostra questi valori, così come l’immagine da cui è stato costruito il container (ubuntu), quando il container è stato creato (sei minuti fa), e il comando che è stato eseguito al suo interno (/bin/bash). L’output fornisce anche lo stato del container (Exited) e quanto tempo fa il container è entrato in tale stato (6 secondi fa). Se il container fosse ancora in esecuzione, vedremmo lo stato “Up”, seguito da quanto tempo è stato in esecuzione.

Se eseguiamo nuovamente lo stesso comando, viene creato un nuovo container completamente nuovo:

  1. docker run -ti ubuntu

Possiamo capire che si tratta di un nuovo container perché l’ID nel prompt dei comandi è diverso, e quando cerchiamo il nostro file Example1, non lo troveremo:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

Questo può far sembrare che i dati siano scomparsi, ma non è il caso. Usciremo ora dal secondo container per vedere che esso, e il nostro primo container con il file che abbiamo creato, sono entrambi presenti nel sistema.

  1. exit

Quando elenchiamo nuovamente i container, entrambi appaiono:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

Passo 2: Riavvio del Primo Contenitore

Per riavviare un contenitore esistente, utilizzeremo il comando start con il flag -a per collegarci ad esso e il flag -i per renderlo interattivo, seguito dall’ID o dal nome del contenitore. Assicurati di sostituire l’ID del tuo contenitore nel comando qui sotto:

  1. docker start -ai 11cc47339ee1

Ci ritroviamo di nuovo al prompt bash del contenitore e quando eseguiamo cat del file che abbiamo creato in precedenza, è ancora lì.

  1. cat /tmp/Example1.txt
Output
Example1

Adesso possiamo uscire dal contenitore:

  1. exit

Questa output mostra che le modifiche apportate all’interno del contenitore persistono attraverso l’arresto e il riavvio dello stesso. È solo quando il contenitore viene rimosso che i contenuti vengono eliminati. Questo esempio illustra anche che le modifiche erano limitate al singolo contenitore. Quando abbiamo avviato un secondo contenitore, rifletteva lo stato originale dell’immagine.

Passo 3: Eliminazione di Entrambi i Contenitori

Abbiamo creato due contenitori e concluderemo il nostro breve tutorial eliminandoli. Il comando docker rm, che funziona solo su contenitori fermi, ti permette di specificare il nome o l’ID di uno o più contenitori, quindi possiamo eliminarli entrambi con quanto segue:

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

Entrambi i contenitori e qualsiasi modifica che abbiamo apportato al loro interno sono ora scomparsi.

Conclusione

Abbiamo esaminato dettagliatamente il comando docker run per vedere come crea automaticamente un nuovo contenitore ogni volta che viene eseguito. Abbiamo anche visto come individuare un contenitore interrotto, avviarlo e connetterci ad esso. Se desideri approfondire la gestione dei contenitori, potresti essere interessato alla guida, Naming Docker Containers: 3 Suggerimenti per Principianti.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers