GUIDA Installazione ed utilizzo di Docker

Pubblicità

ilfe98

Moderatore
Staff Forum
Utente Èlite
Messaggi
3,062
Reazioni
1,296
Punteggio
134

Docker.jpg
Cos'è docker?
Docker è una piattaforma open source, permette ai developer di racchiudere le proprie applicazioni all' interno di container.
La homepage di docker descrive i container in questo modo:

Un container software è un'unità software che racchiude codice e tutte le sue dipendenze, affinchè l’applicazione possa essere eseguita nella stessa maniera in ambienti computazionali diversi.

Al fine di rendere un idea più comune di cosa sia un container, possiamo pensare che esso sia una versione di una virtual machine più snella.
Tecnicamente, al di sotto della semplice punta dell' iceberg le differenze sono abissali, difatti docker è un ambiente paravirualizzato. Un ambiente paravirtuale non offre elevati livelli di isolamento, un errore all'interno del container può influire su altri container in esecuzione.
I vantaggi della containerizzazione sono molteplici, specie se considerati in ambiente cloud, in letteratura sono stati studiati i vantaggi dello sviluppo a microservizi. Inoltre indipendentemente dall'hardware utilizzato è possibile replicare l'applicazione su varie macchine, fornendo astrazione e scalabilità.
Architettura docker

1658765852361.png
Docker segue un' architettura client server, il client comunica con il demone docker, che è effettivamente il componente che si fa carico della compilazione, esecuzione e distribuzione dei container. Demone e client possono essere eseguiti sullo stesso sistema o connettere il client ad un demone remoto. La comunicazione avviente mediante API REST attraverso una socker unix o un' interfaccia di rete. Oltre al classico client, che in ambito windows è chiamato docker desktop, esiste il docker compose, che è una valida alternativa per lavorare con set di applicazioni.

Il demone docker (dockerd) rimane in ascolto di richieste API e controlla immagini, containers, reti e volumi, può a sua volta comunicare con altri demoni al fine di gestire i servizi Docker.

Il client è banalmente chiamato Docker, è il metodo principale con cui gli utenti interagiscono con il demone. Si occupa di effettuare le richieste API al demone.

I docker registries si occupano della fase di distribuzione dell' immagine docker. Ad esempio Docker Hub è un registro pubblico che può essere utilizzato da tutti. Docker (client) è automaticamente configurato per utilizzare questo registro, ma possiamo crearne altri privati.
Gli oggetti principali di docker sono:
  • Immagine: è un template di sola lettura, contiene le istruzioni per la realizzazione di un container. Solitamente le immagini possono essere composizioni di altre immagini, ad esempio installare per installare apache potremmo creare un immagine che a partire da quella di ubuntu aggiunga le istruzioni per integrare apache.​
  • Containers: Un contenitore è un'istanza eseguibile di un'immagine. Puoi creare, avviare, interrompere, spostare o eliminare un container utilizzando l'API Docker o la CLI. Puoi connettere un container a una o più reti, allegarvi spazio di archiviazione o persino creare una nuova immagine in base al suo stato corrente. Attenzione quando un container viene rimosso, tutti i dati al suo interno verranno eliminati se non diversamente indicato.​
Installazione docker in ambiente Windows.

L'installazione di docker in ambiente windows, è estremamente semplice, tuttavia al fine di non incorrere in problemi è necessario che rispettiate i requisiti di compatibilità.
  • Avere Windows 10/11 Pro a 64 bit, ma questo è ovvio.
  • 4GB di RAM
  • Virtualizzazione Hardware attiva nel bios.
Quest'ultimo punto differisce a seconda del costruttore della vostra Motherboard.

Il primo passo da compiere è installare il Windows Subsystem for Linux o WSL, in versione 2.
Finalmente Microsoft ha snellito anche questa procedura ,pertanto l' installazione avviene mediante un semplice comando.

Apriamo una Powershell come amministratore e lanciamo
wsl --install
Attenzione il comando precedente funziona soltanto se non avete precedenti versioni di WSL installate.
Dopodiché scaricate il programma di aggiornamento del kernel a questo link ed installatelo.
Contemporaneamente potete scaricare anche docker desktop
SHA-256 fe430d19d41cc56fd9a4cd2e22fc0e3522bed910c219208345918c77bbbd2a65
Installiamo docker desktop assicurandoci di spuntare l'utilizzo di WSL2 anzichè Hyper-V.
Dopo aver seguito la procedura di installazione, possiamo aprire mediante il menu start docker desktop.
Quest'ultima installazione si occupera di installare dockerd, docker client e docker desktop(che è il client con GUI).

Iniziamo!
L'interfaccia grafica che è stata installata con docker desktop è stata recentemente introdotta, in questa guida non verrà utilizzata, ci occuperemo di fornire le basi di docker e docker compose. Il motivo non è sadismo, semplicemente considerando l'ambiente in cui prodotti come Docker, Docker Swarm, Kubernetes Openshift etc vengono utilizzati, l'interfaccia grafica non esiste.
Possiamo cominciare ad utilizzare docker eseguendo in una finestra di terminale questo comando:
docker run -dp 80:80 docker/getting-started
il comando invoca il client che fa una richiesta API al demone passando alcuni argomenti.
  • dp: la d sta per detached, in sostanza indichiamo al demone che non vogliamo connetterci al container, ma che deve eseguirlo in background. P è l'abbreviazione di port e va utilizzata insieme alle porte da mappare. Il container espone la porta 80, su cui rimane in ascolto di richieste, la porta del container è quella a destra dei due punti x:80, a sinistra è la porta mappata sul nostro host. Utilizzando un qualsiasi browser ed accendo all'indirizzo localhost:80 inoltriamo una richiesta mediante la porta 80, sulla quale ovviamente riceviamo le risposte. La porta del nostro host può essere modificata a proprio piacimento purchè sia libera, mentre quella del container dipende dall'applicazione eseguita. Se ad esempio creassi un immagine per un qualsiasi webserver, ed indicassi che deve rimanere in ascolto sulla porta 80 e cambiassi tramite docker la porta del container non verrebbe segnalato alcun errore, ma il container non funziona.
  • docker/getting-started è un immagine che contiene le istruzioni e le dipendenze per far funzionare l'applicativo all'interno del container. È possibile creare o modificare immagini attraverso l'utilizzo di un file privo di estensione chiamato Dockerfile(per convenzione).
Il demone farà partire il container con l'immagine selezionata se presente offline, altrimenti la scaricherà dal registro di default ovvero DockerHub, potremo accedere all'applicazione all'indirizzo specificato precedentemente. Il container deve necessariamente avere un nome, se non specificato mediante il flag --name verrà assegnato automaticamente da docker. Il nome di un container è estremamente importante, in quanto il demone fornisce anche un servizio di DNS, ipotizzando di creare un container contenente un database sul quale la nostra applicazione scriverà, possiamo rifercirci a quel database attraverso il nome del container, questa è una feature molto importante, in quanto in un ambiente altamente dinamico, fornisce solidità e scalabilità alle applicazioni. I container hanno una versione mimina di file system completamente isolato dall'host, che contiene il necessario per il funzionamento dell'applicazione. L'immagine docker può configurare il container attraverso l'utilizzo di variabili di ambiente, metadata e comandi di default.

Esempio

Un banalissimo esempio di containerizzazione può essere effettuato utilizzando un web server ed un semplice file html. In questo caso utilizziamo apache. Creiamo una cartella con il nome che preferite, all'interno inserite create un file html con questa sintassi:
HTML:
<html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Sviluppo Front End</title>
    </head>
 
    <body>
 
        <h1>Sviluppo Front End</h1>
        <h2>Cos'è il linguaggio HTML?</h2>
        <p>
        <u>HTML</u> è l'acronimo di <i>HyperText Markup Language</i> e <b>non</b> è un linguaggio di programmazione. <br><br>
        L'HTML serve a definire: <br>
        <ul>
           <li> Quali sono gli elementi all’interno della pagina</li>
           <li> Stabilire collegamenti (link) tra le pagine</li>
           <li>Stabilire l’importanza (non la forma o il colore) che hanno i testi</li>
           <li>Creare form per gli utenti</li>
           <li>Fissare titoli</li>
           <li>Caricare immagini e/o video</li>
        </ul>
        Per ulteriori informazioni si veda <a href="https://www.w3schools.com/tags/default.asp "> questo link</a>
        </p>
        <h3>Immagine Locale</h3>
        <img src="mille.jpg" width="400">
 
        <h3>Immagine Online</h3>
        <img src="https://cdn.pixabay.com/photo/2020/04/28/12/54/iceland-5104370_1280.jpg" width="600">
    </body>
 
    </html>
Salvate e scaricate un immagine a caso dal web chiamandola mille.jpg
Inserite il file html e l' immagine all'interno della cartella html e create un il dockerfile.
Ovviamente il file come già detto deve essere privo di estensione.
Inserite queste 2 righe nel file:
Codice:
FROM httpd:2.4
COPY ./html/ /usr/local/apache2/htdocs/
Con queste due direttive modifichiamo l'immagine httpd:2.4 copiandone al suo interno la cartella html nel percoso di default di apache.
Passiamo alla fase di build dell'immagine digitando da terminale (ovviamente il comando deve essere lanciato all'interno della cartella dove sono presenti i file)
docker build -t apache-example .
e lanciamola con il comando
docker run -dit -p 8080:80 --name my-running-app apache-example

A questo punto il demone restituirà l'hash del container appena lanciato e protremo accedervi aprendo il browser all'indirizzo localhost:8080
1662480856152.webp
 
Ultima modifica da un moderatore:
Pubblicità
Pubblicità
Indietro
Top