Docker per principianti: tutto ciò che devi sapere

0
385

Docker crea applicazioni pacchettizzate chiamate container. Ogni contenitore fornisce un ambiente isolato simile a una macchina virtuale (VM). A differenza delle macchine virtuali, i container Docker non eseguono un sistema operativo completo. Condividono il kernel del tuo host e virtualizzano a livello software.

Nozioni di base su Docker

Docker è diventato uno strumento standard per sviluppatori di software e amministratori di sistema. È un modo accurato per avviare rapidamente le applicazioni senza influire sul resto del sistema. Puoi avviare un nuovo servizio con un singolo comando docker run.

I contenitori incapsulano tutto il necessario per eseguire un'applicazione, dalle dipendenze del pacchetto del sistema operativo al tuo codice sorgente. Definisci i passaggi di creazione di un contenitore come istruzioni in un Dockerfile. Docker utilizza il Dockerfile per costruire un'immagine.

Le immagini definiscono il software disponibile nei contenitori. Questo è vagamente equivalente all'avvio di una macchina virtuale con un sistema operativo ISO. Se crei un'immagine, qualsiasi utente Docker sarà in grado di avviare la tua app con docker run.

Come funziona Docker?

I contenitori utilizzano le funzionalità del kernel del sistema operativo per fornire ambienti parzialmente virtualizzati. È possibile creare contenitori da zero con comandi come chroot. Questo avvia un processo con una directory root specificata invece della root del sistema. Ma l'utilizzo diretto delle funzionalità del kernel è complicato, insicuro e soggetto a errori.

Pubblicità

Docker è una soluzione completa per la produzione, la distribuzione e l'uso di contenitori. Le versioni moderne di Docker sono costituite da diversi componenti indipendenti. Innanzitutto, c'è la Docker CLI, che è ciò con cui interagisci nel tuo terminale. La CLI invia i comandi a un demone Docker. Questo può essere eseguito localmente o su un host remoto. Il demone è responsabile della gestione dei contenitori e delle immagini da cui sono creati.

Il componente finale è chiamato runtime del contenitore. Il runtime richiama le funzionalità del kernel per avviare effettivamente i contenitori. Docker è compatibile con runtime che aderiscono alla specifica OCI. Questo standard aperto consente l'interoperabilità tra diversi strumenti di containerizzazione.

Non devi preoccuparti troppo del funzionamento interno di Docker quando inizi per la prima volta. L'installazione di docker sul tuo sistema ti fornirà tutto ciò di cui hai bisogno per creare ed eseguire container.

Perché così tante persone usano Docker?

I container sono diventati così popolari perché risolvono molte sfide comuni nello sviluppo del software. La capacità di containerizzare una volta ed eseguire ovunque riduce il divario tra il tuo ambiente di sviluppo e i tuoi server di produzione.

L'utilizzo dei contenitori ti dà la certezza che ogni ambiente è identico. Se hai un nuovo membro del team, deve solo eseguire la finestra mobile per configurare la propria istanza di sviluppo. Quando avvii il servizio, puoi utilizzare la tua immagine Docker per la distribuzione in produzione. L'ambiente live corrisponderà esattamente alla tua istanza locale, evitando “funziona sulla mia macchina” scenari.

Docker è più conveniente di una macchina virtuale in piena regola. Le VM sono strumenti generici progettati per supportare ogni possibile carico di lavoro. Al contrario, i contenitori sono leggeri, autosufficienti e più adatti a casi d'uso usa e getta. Poiché Docker condivide il kernel dell'host, i container hanno un impatto trascurabile sulle prestazioni del sistema. Il tempo di lancio del contenitore è quasi istantaneo, poiché stai solo avviando processi, non un intero sistema operativo.

Per iniziare

Docker è disponibile su tutte le distribuzioni Linux più diffuse. Funziona anche su Windows e macOS. Segui le istruzioni di configurazione di Docker per la tua piattaforma per farlo funzionare.

Annuncio

Puoi verificare che l'installazione funzioni avviando un semplice contenitore:

docker run hello-world

Questo avvierà un nuovo contenitore con l'immagine di base di hello-world. L'immagine emette un output che spiega come utilizzare Docker. Il contenitore quindi esce, riportandoti al tuo terminale.

Creazione di immagini

Una volta eseguito hello-world, sei pronto per creare le tue immagini Docker. Un Dockerfile descrive come eseguire il servizio installando il software richiesto e copiando i file. Ecco un semplice esempio che utilizza il server web Apache:

FROM httpd:latest RUN echo “LoadModule headers_module module/mod_headers.so” >> /usr/local/apache2/conf/httpd.conf COPY .htaccess /var/www/html/.htaccess COPY index.html /var/www/html/index.html COPY css//var/www/html/css < p>La linea FROM definisce l'immagine di base. In questo caso, partiamo dall'immagine ufficiale di Apache. Docker applica le istruzioni rimanenti nel tuo Dockerfile sopra l'immagine di base.

La fase RUN esegue un comando all'interno del contenitore. Può trattarsi di qualsiasi comando disponibile nell'ambiente del contenitore. Stiamo abilitando il modulo Apache delle intestazioni, che potrebbe essere utilizzato dal file .htaccess per impostare le regole di routing.

Pubblicità

Le righe finali copiano i file HTML e CSS nella directory di lavoro nell'immagine del contenitore. La tua immagine ora contiene tutto il necessario per eseguire il tuo sito web.

Ora puoi creare l'immagine:

docker build -t mio-sito web:v1 .

Docker utilizzerà il tuo Dockerfile per costruire l'immagine. Vedrai l'output nel tuo terminale mentre Docker esegue ciascuna delle tue istruzioni.

Il -t nel comando etichetta la tua immagine con un dato nome (my-website:v1). Questo rende più facile fare riferimento in futuro. I tag hanno due componenti, separati da due punti. La prima parte imposta il nome dell'immagine, mentre la seconda di solito indica la sua versione. Se ometti i due punti, Docker utilizzerà per impostazione predefinita l'ultima versione del tag.

Il file . alla fine del comando indica a Docker di utilizzare il Dockerfile nella directory di lavoro locale. Questo imposta anche il contesto di compilazione, consentendoti di utilizzare file e cartelle nella tua directory di lavoro con le istruzioni COPY nel tuo Dockerfile.

Una volta creata l'immagine, puoi avviare un contenitore utilizzando docker run :

docker run -d -p 8080:80 mio-sito web:v1

Stiamo utilizzando alcuni flag in più con la finestra mobile eseguita qui. Il flag -d fa scollegare la CLI Docker dal contenitore, consentendone l'esecuzione in background. Una mappatura delle porte è definita con -p, quindi la porta 8080 sull'host viene mappata sulla porta 80 nel contenitore. Dovresti vedere la tua pagina web se visiti localhost:8080 nel tuo browser.

Annuncio

Le immagini Docker sono formate da livelli. Ogni istruzione nel tuo Dockerfile crea un nuovo livello. Puoi utilizzare funzioni di costruzione avanzate per fare riferimento a più immagini di base, scartando i livelli intermedi delle immagini precedenti.

Registri di immagini

Una volta che hai un'immagine, puoi spingerlo in un registro. I registri forniscono l'archiviazione centralizzata in modo da poter condividere i contenitori con altri. Il registro predefinito è Docker Hub.

Quando esegui un comando che fa riferimento a un'immagine, Docker verifica innanzitutto se è disponibile localmente. In caso contrario, proverà a estrarlo da Docker Hub. Puoi estrarre manualmente le immagini con il comando docker pull:

docker pull httpd:latest

Se desideri pubblicare un'immagine, crea un account Docker Hub. Esegui il login docker e inserisci il tuo nome utente e password.

Successivamente, tagga la tua immagine usando il tuo nome utente Docker Hub:

tag docker mia-immagine:latest docker-hub-username/mia-immagine:latest

Ora puoi inviare la tua immagine:

docker push docker-hub-username/my-image:latest

Gli altri utenti potranno caricare la tua immagine e avviare contenitori con essa.

Pubblicità

Puoi eseguire il tuo registro se hai bisogno di uno spazio di archiviazione privato per le immagini. Diversi servizi di terze parti offrono anche registri Docker come alternative a Docker Hub.

Gestione dei contenitori

Docker CLI ha diversi comandi che ti consentono di gestire i contenitori in esecuzione. Ecco alcuni dei più utili da sapere:

Elencazione dei contenitori

docker ps ti mostra tutti i tuoi contenitori in esecuzione. L'aggiunta del flag -a mostrerà anche i contenitori fermi.

Arresto e avvio dei contenitori

Per arrestare un contenitore, esegui docker stop my-container. Sostituisci my-container con il nome o l'ID del contenitore. Puoi ottenere queste informazioni dal comando ps. Un contenitore interrotto viene riavviato con docker start my-container.

I contenitori di solito vengono eseguiti finché il loro processo principale rimane attivo. I criteri di riavvio controllano cosa succede quando un contenitore si arresta o si riavvia l'host. Passa –restart sempre a docker run per riavviare un contenitore immediatamente dopo l'arresto.

Ottenere una shell

Puoi eseguire un comando in un contenitore che utilizza docker exec my-container my-command. Ciò è utile quando si desidera richiamare manualmente un eseguibile separato dal processo principale del contenitore.

Annuncio

Aggiungi il flag -it se hai bisogno dell'accesso interattivo. Ciò ti consente di entrare in una shell eseguendo docker exec -it my-container sh.

Registri di monitoraggio

Docker raccoglie automaticamente l'output emesso nei flussi di input e output standard di un contenitore. Il comando docker logs my-container mostrerà i log di un container all'interno del tuo terminale. Il flag –follow imposta un flusso continuo in modo da poter visualizzare i log in tempo reale.

Ripulire le risorse

I vecchi contenitori e le immagini possono accumularsi rapidamente nel sistema. Usa docker rm my-container per eliminare un contenitore in base al suo ID o nome.

Il comando per le immagini è docker rmi my-image:latest. Passa l'ID dell'immagine o il nome completo del tag. Se specifichi un tag, l'immagine non verrà eliminata finché non avrà più tag assegnati. In caso contrario, il tag specificato verrà rimosso ma gli altri tag dell'immagine rimarranno utilizzabili.

Le pulizie in blocco sono possibili utilizzando il comando docker prune. Questo ti dà un modo semplice per rimuovere tutti i contenitori bloccati e le immagini ridondanti.

Gestione grafica

Se il terminale non fa per te, può utilizzare strumenti di terze parti per configurare un'interfaccia grafica per Docker. I dashboard Web ti consentono di monitorare e gestire rapidamente la tua installazione. Ti aiutano anche a prendere il controllo remoto dei tuoi container.

Archiviazione dati permanente

I contenitori Docker sono effimeri per impostazione predefinita. Le modifiche apportate al filesystem di un contenitore non verranno mantenute dopo l'arresto del contenitore. Non è sicuro eseguire qualsiasi forma di sistema di archiviazione file in un contenitore avviato con un comando di esecuzione docker di base.

Annuncio

Esistono diversi approcci alla gestione dei dati persistenti. Il più comune è utilizzare un volume Docker. I volumi sono unità di archiviazione montate in filesystem contenitore. Tutti i dati in un volume rimarranno intatti dopo l'arresto del contenitore collegato, consentendoti di connettere un altro contenitore in futuro.

Mantenimento della sicurezza

I carichi di lavoro Dockerized possono essere più sicuri delle loro controparti bare metal, poiché Docker fornisce una certa separazione tra il sistema operativo e i tuoi servizi. Tuttavia, Docker è un potenziale problema di sicurezza, poiché normalmente viene eseguito come root e potrebbe essere sfruttato per eseguire software dannoso.

Se stai eseguendo Docker solo come strumento di sviluppo, l'installazione predefinita è generalmente sicuro da usare. I server di produzione e le macchine con un socket demone esposto alla rete dovrebbero essere rafforzati prima di andare in diretta.

Controlla l'installazione di Docker per identificare potenziali problemi di sicurezza. Sono disponibili strumenti automatizzati che possono aiutarti a trovare punti deboli e suggerire soluzioni. Puoi anche scansionare singole immagini di contenitori per problemi che potrebbero essere sfruttati dall'interno.

Lavorare con più contenitori

Il comando docker funziona solo con un contenitore alla volta. Spesso vorrai utilizzare i contenitori in modo aggregato. Docker Compose è uno strumento che ti consente di definire i tuoi contenitori in modo dichiarativo in un file YAML. Puoi avviarli tutti con un singolo comando.

Questo è utile quando il tuo progetto dipende da altri servizi, come un backend Web che si basa su un server di database. Puoi definire entrambi i contenitori nel tuo docker-compose.yml e beneficiare di una gestione semplificata con il networking automatico.

Ecco un semplice file docker-compose.yml:

versione: “3” servizi: app: immagine: app-server:ultime porte: – 8000:80 database: immagine: database-server:ultimi volumi: – database-data:/data volumes: database-data: Annuncio

Questo definisce due contenitori (app e database). Viene creato un volume per il database. Questo viene montato su /data nel contenitore. La porta 80 dell'app server è esposta come 8000 sull'host. Esegui docker-compose up -d per attivare entrambi i servizi, inclusi la rete e il volume.

L'uso di Docker Compose ti consente di scrivere definizioni di contenitori riutilizzabili che puoi condividere con altri. Puoi eseguire il commit di un docker-compose.yml nel tuo controllo di versione invece di far memorizzare agli sviluppatori i comandi di esecuzione di docker.

Esistono anche altri approcci per l'esecuzione di più contenitori. Docker App è una soluzione emergente che fornisce un altro livello di astrazione. Altrove nell'ecosistema, Podman è un'alternativa Docker che ti consente di creare “pod” di container all'interno del tuo terminale.

Orchestrazione di container

Docker normalmente non viene eseguito così com'è in produzione. Ora è più comune utilizzare una piattaforma di orchestrazione come Kubernetes o la modalità Docker Swarm. Questi strumenti sono progettati per gestire più repliche di container, il che migliora la scalabilità e l'affidabilità.

Docker è solo uno dei componenti del più ampio movimento di containerizzazione. Gli orchestrator utilizzano le stesse tecnologie di runtime dei container per fornire un ambiente più adatto alla produzione. L'utilizzo di più istanze di container consente di eseguire gli aggiornamenti in sequenza e la distribuzione tra macchine, rendendo la distribuzione più resiliente a modifiche e interruzioni. La normale CLI docker si rivolge a un host e funziona con singoli container.

Una potente piattaforma per container

Docker ti offre tutto ciò di cui hai bisogno per lavorare con i container. È diventato uno strumento chiave per lo sviluppo del software e l'amministrazione del sistema. I principali vantaggi sono un maggiore isolamento e portabilità per i singoli servizi.

Pubblicità

Fare conoscenza con Docker richiede la comprensione dei concetti di base del contenitore e dell'immagine. Puoi applicarli per creare le tue immagini e ambienti specializzati che containerzzano i tuoi carichi di lavoro.

LEGGI SUCCESSIVO

  • › Come controllare la tua casa intelligente dalle Impostazioni rapide di Android
  • › Come convertire un documento Word in una presentazione PowerPoint
  • › Che cos'è Amazon Echo Auto e come funziona?
  • › Come controllare la risoluzione dello schermo in Windows 10
  • › Come recuperare il widget meteo della barra delle applicazioni di Windows 10