Continuiamo con le nostre guide dedicate a Docker. Oggi vediamo nel dettaglio un argomento di quelli davvero fondamentali per tutti coloro che si occupano di sviluppo web: Docker container.
Un container è l’istanza in esecuzione di un’applicazione in un ambiente isolato al quale vengono dinamicamente assegnate risorse per l’esecuzione. Il container al suo interno contiene l’applicazione da eseguire e tutto ciò di cui necessita: runtime, librerie, configurazione, ecc.
Qual è la differenza tra immagine e container?
L’immagine docker è un package statico, nel quale vengono pacchettizzate tutte le risorse necessarie all’esecuzione di un’applicazione.
Da un’immagine Docker si possono lanciare più container. Supponiamo ad esempio che la nostra applicazione richieda più istanze di un determinato servizio, come ad esempio redis. Dalla stessa immagine di redis reperibile sul Docker hub Docker hub è possibile avere più container in cui redis viene eseguito.
Come si crea un container?
Per creare un container, partendo da un’immagine di partenza è molto semplice: è sufficiente eseguire il comando docker run.
$ docker run redis –name ‘redis-server’
Lanciando questo comando, docker eseguirà il download dell’immagine dal docker hub ed eseguirà un’istanza di redis.
L’argomento –name ci permette di identificare il container e possiamo usarlo come riferimento, come vedremo negli esempi successivi.
Interagire con il container
E’ possibile eseguire un comando all’interno del container con il comando docker exec, come mostrato nell esempio:
$ docker exec -it redis-server redis-cli
Con questo comando Docker, lanciamo il comando redis-cli all’interno del container. Utilizzando l’argomento -it il comando viene eseguito in modalità interattiva: questo ti permette di accedere al prompt dei comandi all’interno del container.
Networking
A seconda dello scopo dell’applicazione, il container potrebbe esporre una porta TCP o UDP alla quale accedere dall’esterno. Se vogliamo far comunicare il container con l’host, dovremo “mappare” la porta in modo che Docker la renda disponibile all’accesso da parte dell’host.
Se ad esempio sul nostro computer locale abbiamo un client con interfaccia grafica per redis e vogliamo fare in modo che si colleghi al container, dovremo esporre la porta 6379. Per far questo, al momento in cui lanciamo il container, dovremo utilizzare l’argomento -p.
$ docker run redis -p 6379:6379 –name ‘redis-server’
In questo modo, sul nostro redis client possiamo impostare 127.0.0.1 come host e 6379 come porta e quindi accedere ai dati contenuti nel container. Possiamo anche specificare una porta personalizzata per il container; tutto questo ci torna utile quando si hanno due container con la stessa applicazione, o che comunque espongono la stessa porta.
$ docker run redis -p 1234:6379 –name ‘redis-server’
In conclusione Docker container
Creare un container con Docker è molto semplice come abbiamo visto. Uno sviluppatore moderno oggi deve conoscere tutte le funzioni di Docker alla perfezione se vuole ottimizzare il suo modo di lavorare e la qualità degli applicativi che ha intenzione di realizzare.
Dopo questo approfondimento dedicato a Docker container, vedremo nei prossimi articoli come creare un ambiente di lavoro con Docker, gestendo più container e facendoli interagire fra di loro, argomenti decisivi per chi vuole diventare un web developer di livello avanzato.
Read related articles
Kubernetes Cloud: servizi Cloud per Kubernetes, mini guida pratica
Kubernetes Cloud: vediamo da vicino Amazon Elastic Kubernetes Service (EKS) Google Kubernetes Engine (GKE) e Servizio Azure Kubernetes (AKS) I
Come funziona Kubernetes: funzionamento e struttura
Come funziona Kubernetes: mini guida per capire il funzionamento di uno dei tools più importanti per un developer oggi Come
Docker vs Kubernetes: vediamo in cosa differiscono
Docker vs Kubernetes: vediamo in cosa differiscono e perché a volte si tende a far confusione Spesso sentiamo chiedere in