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:
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:
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:
Una volta scaricata l’immagine (punto di partenza di un container) avviamo l’esecuzione del container di Alpine con l’istruzione docker run:
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:
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.
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:
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:
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”:
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.
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
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!!
-
Linkedin
-
Twitter
-
Facebook
-
Whatsapp
Scopri i nostri corsi!
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.