Facciamo pratica con i container!

A4 35

Dopo aver visto che cosa sono i container e quali sono i vantaggi nell’utilizzarli, continuiamo a parlarne adottando un approccio più pratico.

Approccio pratico ai Container

Tutte le operazioni verranno effettuate su una semplice macchina con sistema operativo Ubuntu in cui è stata installato Docker, la container runtime per eccellenza. Fino a poche versioni fa, eseguire Docker su macOS e Windows era una vera seccatura. Tuttavia, ultimamente, Docker ha investito in modo significativo nel migliorare l’esperienza di utilizzo; quindi far funzionare Docker sul tuo sistema operativo preferito è ora un gioco da ragazzi.

Verifichiamo che Docker sia correttamente installato lanciando il seguente comando:

Hello World Docker

Perfetto! L’output del comando ci conferma che Docker sta funzionando regolarmente. Ora che abbiamo appurato che l’ambiente è pronto, creiamo un container a partire dall’immagine di Alpine.

Iniziamo lanciando il seguente comando:

Alpine

Il comando pull scarica l’immagine alpine dal registro di Docker (https://hub.docker.com//) e la salva in locale. Puoi utilizzare il comando docker image ls per visualizzare l’elenco di tutte le immagini presenti localmente:

Puoi utilizzare il comando docker image ls per visualizzare l’elenco di tutte le immagini presenti localmente:

docker img ls

Una volta scaricata l’immagine (punto di partenza di un container) avviamo l’esecuzione del container di Alpine con l’istruzione docker run:

docker run alpine


Ops, non è successo niente! Abbiamo sbagliato qualcosa? È un bug del software? Nessuna delle due, in realtà dietro le quinte sono successe molte cose: con il comando run, Docker recupera l’immagine (alpine in questo caso), crea il container ed esegue un comando all’interno del container.
Quando abbiamo eseguito docker run alpine, non abbiamo esplicitato un comando, quindi il container si è avviato, ha eseguito il comando predefinito dell’immagine (nel caso di alpine /bin/sh) e non trovando operazioni da eseguire il container è stato terminato.

Proviamo a passare un comando, un’operazione da far eseguire al container di alpine:

docker run alpine echo

Ottimo! Questa volta riusciamo a vedere un risultato. In questo caso Docker ha eseguito all’interno del container il comando che abbiamo indicato (echo “Ciao a tutti da Desotech!”). Il container, non trovando altre indicazioni da eseguire, è stato successivamente terminato.

Verifichiamo, con il comando docker ps, i container attivi nell’ambiente.

container attivi nellambiente

Dato che non abbiamo container in esecuzione, il risultato è un output vuoto. Proviamo allora ad aggiungere il flag -a al comando precedente e premiamo Invio:

comando con flag a

Con l’opzione -a (o “–all”) elenchiamo tutti i container, sia quelli in esecuzione che quelli in terminati (in stato di Exited).

NGINX Web Server

Dopo aver creato ed eseguito container che semplicemente stampavano una frase a schermo, passiamo a qualcosa di più interessante e sicuramente più utile, come ad esempio un web server.

Osserviamo come con un semplice comando è possibile mettere in piedi un’istanza di nginx:

Istanza nginx

Con l’istruzione docker run (che abbiamo già utilizzato) nginx, stiamo indicando a Docker di recuperare l’immagine ed avviare il container. Docker inizialmente cerca l’immagine sul nostro ambiente locale e non trovandola, la scarica in autonomia dal Docker Hub, registro pubblico per antonomasia. Una volta sistemata la questione immagine viene eseguito il comando di default nel container che nel caso di NGINX si tratta di uno script.

L’opzione -p 80:80 ci serve per esporre il web server, che risponde sulla porta 80 all’interno del container, sulla porta 80 della nostra macchina Ubuntu.

Proviamo, quindi, adesso a collegarci tramite un browser al web server digitando nella barra degli indirizzi “http://localhost:80”:

nginx localhost

Voilà! In un attimo abbiamo la nostra istanza di web server pronta e perfettamente funzionante.


Eseguire un container di WordPress

Facciamo un altro esempio e proviamo, questa volta, ad eseguire un container di WordPress.

Container di WordPress

Con un comando molto simile a quello usato in precedenza, abbiamo eseguito un’istanza di WordPress; le uniche differenze sono la porta esposta sulla macchina Ubuntu, in questo caso la 32117, ma avremmo potuto specificare qualsiasi porta purché libera, e l’opzione “-d” (detached mode) che semplicemente indica al container di eseguire le sue operazioni in background, senza tenermi occupato il terminale.

Navighiamo verso l’indirizzo http://localhost:32117

Naviga verso localhost

Ed ecco che troviamo la nostra istanza di WordPress ad aspettarci.

Conclusione

Abbiamo toccato con mano il mondo dei container e abbiamo constatato quanto sia semplice e veloce creare ed avviare web server o altre tipologie di applicativi, cosa che con le macchine virtuali, ad esempio, non è così immediata.  Se desideri ampliare le tue competenze su Docker, consulta le schede del nostro percorso formativo Docker DSD

Condividi l’articolo!!


Scopri i nostri corsi!

Formazione Cloud-Native in presenza o da remoto
Picture of Abdelah Sato
Abdelah Sato

DevOps Instructor & Engineer
Sono un System Engineer, istruttore e consulente nell’ambito delle tecnologie di virtualizzazione (VMware) e container (Docker & Kubernetes) con una smodata passione per il problem solving. Nel corso degli anni ho maturato esperienza nella gestione di sistemi informatici e nel campo dell’automazione attraverso l’utilizzo di strumenti quali Ansible, Terraform e VMware Automation.