Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Minicorso Docker - Parte 1: Le Basi

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Minicorso Docker - Parte 1: Le Basi

In un mondo tecnologico in continua evoluzione, è sempre più importante essere in grado di scalare e adattare rapidamente i sistemi alle crescenti richieste degli utenti.

I Container offrono una soluzione efficace a questo problema, poiché permettono di isolare il software e farlo eseguire in modo indipendente su diversi sistemi operativi e hardware. Ciò consente alle applicazioni basate sui Container di passare facilmente tra gli ambienti di sviluppo, test e produzione.

Tra le migliori implementazioni della tecnologia dei Container c’è Docker, che offre una serie di funzionalità utili, a cui sarà difficile rinunciare dopo averle imparate ed utilizzate.

Le basi di Docker
In questo talk esploreremo le basi di Docker: partiremo dal concetto di container, lo paragoneremo con le Virtual Machine, capiremo quali sono le differenze, i motivi per cui Docker è nato, i problemi che risolve e quando conviene utilizzarlo o meno.

Dopo aver installato insieme Docker, andremo ad analizzare la sua architettura ed inizieremo a prendere confidenza con la sua CLI (Command-line interface).

Nello specifico:

- Cosa sono i container
- Differenza con le Virtual Machine
- Un pò di storia dei container
- Installazione di Docker
- Docker CLI
- Comandi di base
- Le immagini Docker

Avatar for Marco Ferraioli

Marco Ferraioli

January 19, 2023

Other Decks in Programming

Transcript

  1. Chi sono Marco Ferraioli Back End Developer @ Webeetle Srl

    github.com/paranoiasystem linkedin.com/in/marcoferraioli93
  2. Cos’è Docker? Docker è una Container Platform, più semplicemente possiamo

    dire che una suite di software e servizi che in maniera sinergica servono a gestire l'intero ciclo di vita di software containerizzati.
  3. Cos’è un Container? Un container è un tipo di pacchetto

    software che include tutto il necessario per far funzionare un'applicazione, come il codice sorgente, le dipendenze e le librerie. Questo fa sì che il loro software funzionerà allo stesso modo in qualsiasi ambiente in cui viene eseguito, a prescindere dalle configurazioni del sistema operativo sottostante. I container sono di facile distribuzione ed esecuzione, inoltre risultano molto leggeri ed efficienti. I container condividono il kernel del sistema operativo dell'host, ma vengono eseguiti in modo da garantire l’isolamento tra loro. Su una macchina è possibile avere più container contemporaneamente in esecuzione. Docker è uno dei più popolari sistemi di containerizzazione, ma ci sono anche altri sistemi come LXC, rkt e containerd.
  4. Alternativa: Le Macchine Virtuali La virtualizzazione è una tecnologia che

    consente di creare un ambiente virtuale all'interno di un sistema fisico. Ciò significa che è possibile creare uno o più sistemi operativi virtuali su un unico host fisico. Ogni sistema operativo virtuale (detto anche "guest") funziona come se fosse installato su una macchina fisica separata, ma condivide le risorse dell'host. Il processo di virtualizzazione viene reso possibile da un componente chiamato Hypervisor. Esistono due tipi di Hypervisor: - tipo 1: hypervisor nativo o bare-metal, si installa direttamente sul hardware dell'host. - tipo 2: hypervisor di livello host, che si installa su un sistema operativo esistente.
  5. Vantaggi dei Container L'impiego dei container offre numerosi vantaggi, alcuni

    sono: - Efficienza - Isolamento - Controllo di versione - Scalabilità
  6. Architettura - Architettura di tipo Client-server usata per la gestione

    di immagini, container, volumi e reti virtuali. - Di solito Client (Docker CLI) e Server (Docker Daemon) sono installati sulla stessa macchina. - La comunicazione di default avviene tramite uno unix socket, ma può essere esposto anche su un socket tcp.
  7. Immagini - Un'immagine Docker è il risultato della sovrapposizioni di

    più layer. - I layer vengono tenuti insieme da uno Union File System. - La particolarità dei layer che compongono un'immagine Docker è la loro immutabilità. - Possiamo vedere un'immagine Docker come la classe la cui istanza è rappresentata dai container. - Nel momento in cui si crea un container, Docker si occuperà di aggiungere, in cima ai layer, un nuovo layer scrivibile.
  8. Registry - Il registry è un repository di immagini Docker.

    - Le Immagini vengono organizzate mediante dei TAG, utili per distinguere le versioni. - Esistono registry pubblici, es.: Docker Hub (Docker) o Quay (Red Hat). - Diversi cloud provider offrono servizi di registry per immagini, es.: ECR di AWS, GCR di Google Cloud, ACR di Azure. - Docker mette a disposizione un'immagine Docker per creare il proprio registry privato.
  9. Installare Docker In ambito desktop consiglio di installare Docker Desktop,

    che offre anche una comoda ed intuitiva GUI. Mentre in ambito server consiglio l'installazione del solo engine. Riferimenti utili: - docs.docker.com/engine/install/
  10. Ciclo di vita di un container Docker Il ciclo di

    vita di un container Docker può essere diviso in tre fasi principali: creazione, esecuzione ed eliminazione. Creazione: partendo da un'immagine Docker, si utilizza il comando docker run. In questa fase, vengono assegnate le risorse al container, e vengono impostate le varie opzioni fornite in fase di avvio. Esecuzione: una volta creato, il container viene avviato e l'applicazione all'interno del container inizia ad essere eseguita. È possibile utilizzare i comandi docker start, docker stop o docker restart per gestire il suo ciclo di vita. Terminazione: quando si desidera interrompere l'esecuzione di un container, si utilizza il comando docker stop per arrestare il container. Se si desidera rimuovere completamente un container, si utilizza il comando docker rm.
  11. Comando run Il comando run avvia un container e se

    non presente nel sistema la scarica dal registry impostato di default. Una volta avviato il container il processo con PID 1 sarà quello definito come entry point nell’immagine. Eseguiamo un container Ubuntu: docker run -it ubuntu:latest /bin/bash In questo caso il processo con PID 1 sarà /bin/bash
  12. Comando create e ps Il comando create si comporta come

    il comando run ma si occupa solo di creare il container senza avviarlo. Tramite il comando ps invece è possibile vedere la lista dei container attivi, aggiungendo il parametro -a nella lista sono presenti anche i container in stop o pause.
  13. Comando exec e attach Il comando exec ci consente di

    lanciare un comando all'interno del conatiner, mentre il comando attach aggancia il terminale allo stdin, stdout e stderr del container sul processo impostato come entrypoint nell'immagine.
  14. Comandi per la gestione del ciclo di vita Il comando

    start avvia un container in stato stopped. Il comando stop arresta un container in stato running, non si perde il contenuto del filesystem. Il comando restart riavvia un container, non si perde il contenuto del filesystem. Il comando pause mette nello stato paused un container in stato running, non si perde il contenuto del filesystem. Il comando unpause mette in running un container in stato paused, non si perde il contenuto del filesystem.
  15. Comando rm e rmi Il comando rm rimuove un container,

    questo è possibile se il container è in stato stopped, questo ci fa perdere il contenuto del filesystem. Il comando rmi rimuove un immagine se nessun container la sta usando.
  16. Detached Il comando run ci offre la possibilità di lanciare

    un container in detach mode, ovvero in background, aggiungendo il parametro -d.
  17. Restart policy Quando si avvia un container tramite il parametro

    –restart possiamo definire delle politiche su come deve comportarsi il container in caso di errore o arresto. I possibili valori sono: - no - on-failure[:max-retries] - always - unless-stopped
  18. Docker image e build Per creare una nuova immagine docker

    si hanno a disposizione due metodi: - tramite il comando docker commit, a partire da un container esistente creiamo una nuova immagine - tramite il comando build usano un dockerfile
  19. Docker file Un Dockerfile è un file di testo che

    descrive tutti i passi necessari per creare un'immagine Docker. È composto da una serie di istruzioni, ognuna delle quali crea un nuovo layer nell'immagine. Possiamo vederlo come il codice sorgente dell'immagine.
  20. Istruzioni Docker file Comando Spiegazione FROM Ci consente di impostare

    l’immagine di partenza su cui si baserà la nostra immagine. RUN Esegue i comandi durante il processo di build; l’esecuzione di questa istruzione partendo dall’immagine corrente andrà a creare un layer al di sopra di essa. COPY Si occupa di copiare dei file o directory dal nostro file system all’interno dell’immagine, questi file poi li ritroveremo all’interno del file system del container alla path specificata.
  21. Istruzioni Docker file Comando Spiegazione ADD Si comporta come l’istruzione

    COPY, ma consente nel caso in cui venga selezionato un archivio come input di avere i dati decompressi alla path specificata come destinazione. Nella maggior parte dei casi è preferibile usare l’istruzione COPY. WORKDIR Questa istruzione ci consente di impostare la directory di base in cui verranno eseguiti i comandi RUN, CMD, ENTRY POINT, COPY e ADD. Nel caso in cui la directory specificata non esiste, questa verrà creata. ENV Ci consente di impostare una variabile d’ambiente, questa variabile sarà presente nel container ma anche durante la fase di build dopo l'esecuzione del comando.
  22. Istruzioni Docker file Comando Spiegazione EXPOSE Consente di specificare su

    quale porta il container sarà in ascolto. È possibile specificare più porte ed anche quali protocolli. Se non specificato il protocollo di default sarà TCP.
  23. Istruzioni Docker file Comando Spiegazione ENTRYPOINT Questa istruzione permette di

    specificare un comando da eseguire al momento dell’avvio del container. A differenza del comando RUN questo comando non andrà a creare un nuovo layer. Di solito questo comando si usa quando si vuole stanziare un demone all’avvio del container. Tutto quello che verrà inserito dopo il nome dell'immagine nel comando di run verrà passato come parametro aggiuntivo al comando specificato nel ENTRYPOINT. Inoltre al comando run tramite la direttiva –entrypoint possiamo andare a specificare un comando da dare in sostituzione a quello presente nell’immagine.
  24. Istruzioni Docker file Comando Spiegazione CMD Si comporta esattamente come

    il comando ENTRYPOINT. Nel caso in cui venga specificato un ENTRY POINT nel Dockerfile l’istruzione CMD verrà ignorata. A differenza del comando ENTRYPOINT non abbiamo bisogno di nessuna direttiva; se al run vogliamo utilizzare un altro comando, basta inserirlo dopo il nome dell’immagine.