Se sei un principiante a Docker composi, ma hai una certa conoscenza di Docker, questo articolo fa per te. Potrai imparare:
Prima di immergersi nelle parti succose di questo articolo, un piccolo background sulla tecnologia dovrebbe essere fantastico.
La containerizzazione è diventata una parte fondamentale dell'infrastruttura software e questo vale per progetti di grandi dimensioni o su piccola scala. Mentre i container non sono nuovi, Docker li ha resi popolari. Con i contenitori, i problemi di dipendenza diventano un ricordo del passato. I contenitori svolgono anche un ruolo enorme nel rendere l'architettura di micro-service molto efficace. Le applicazioni software sono realizzate con servizi più piccoli, quindi è facile avere questi servizi in contenitori e comunicano.
Il problema con questo è che ci saranno così tanti contenitori in esecuzione. Tale che gestirli diventa complesso. Questo crea la necessità di uno strumento aiuta a eseguire più contenitori, cosa che fa la composizione di Docker. Alla fine dell'articolo, capirai i concetti di Basic Docker Composi e sarai anche in grado di usarlo.
Senza tutta la complessità, Docker Compose è uno strumento che consente di gestire più contenitori Docker. Ricorda i micro-servizi? Il concetto di dividere un'applicazione Web in diversi servizi? Bene, quei servizi funzionano in singoli contenitori che devono essere gestiti.
Immagina che un'applicazione web abbia alcuni di questi servizi:
Seguendo un'architettura simile a un microservizio, questi servizi saranno divisi e eseguiti in contenitori separati. Docker Compose semplifica la gestione di tutti questi contenitori, invece di gestirli individualmente. È importante notare che Docker Compose non costruisce esplicitamente immagini Docker. Il compito della costruzione di immagini viene svolto da Docker attraverso il Dockerfile.
Confronti popolari
È comune avere molte soluzioni per un problema. Docker Compose Risolve questo problema di gestione di più contenitori. Di conseguenza, ci sono spesso confronti con altre soluzioni. Dovresti notare che la maggior parte di questi confronti sono quelli sbagliati. Anche se spesso non sono validi, è meglio che tu impari su di loro in quanto ti aiuta a capire meglio la composizione di Docker.
I due confronti da discutere sono:
Docker Compose vs Kubernetes
Kubernetes è spesso paragonato alla composizione di Docker. Ma le somiglianze in entrambi gli strumenti sono minuti, con grandi differenze. Queste tecnologie non sono allo stesso livello o scala. Quindi, confrontare entrambi gli strumenti è assolutamente sbagliato.
Kubernetes popolarmente noto come K8S è uno strumento open source che può essere utilizzato per automatizzare i contenitori (non limitati a Docker). Con K8S, è possibile distribuire e amministrare contenitori, assicurando che si ridimensionano a carichi diversi. Kubernetes garantisce che i contenitori siano tolleranti ai guasti e funzionino in modo ottimale causando loro l'auto-freccia, che non otterrai dalla composizione Docker.
Kubernetes è uno strumento più potente. È più adatto per la somministrazione di contenitori per applicazioni su larga scala in produzione.
Docker Compose vs Docker Swarm
La compose di Docker è spesso rispetto allo sciame Docker ed è sbagliato come il confronto di Kubernetes. Invece, Docker Swarm dovrebbe essere quello paragonato a Kubernetes.
Docker Swarm è uno strumento open source che consente di eseguire l'orchestrazione del contenitore proprio come faresti Kubernetes. Entrambi hanno i loro pro e contro, ma questo non è l'argomento della discussione. Farai bene sapendo che entrambi sono simili e nessuno dei due è un'alternativa a Docker.
Installazione di docker
Docker Compose è uno strumento Docker ufficiale, ma non viene fornito con l'installazione Docker. Quindi, devi installarlo come pacchetto separato. Il processo di installazione di Docker Compose per Windows e Mac è disponibile sul sito ufficiale.
Per installare Docker Composizione su Ubuntu, è possibile utilizzare il seguente comando:
sudo apt-get installa docker-compose
Per installare Docker Composizione su altre distro Linux, è possibile utilizzare Curl. Basta eseguire i seguenti comandi:
sudo curl -l
https: // github.com/docker/compose/versioni/download/1.18.0/Docker-compose-'uname
-S ' -' UNAME -M '-O/USR/Local/Bin/Docker -Opse
Poi:
sudo chmod +x/usr/local/bin/docker-compose
Il primo comando scarica l'ultima versione di Docker Composi alla directory dedicata ai pacchetti. Il secondo imposta le autorizzazioni del file, rendendolo eseguibile.
Il docker-compose.File YML
Non sarà terribilmente sbagliato dire che un file di compositore Docker è di compositore di Docker, cosa è un Dockerfile. All'interno del file di compositore Docker, si trovano tutte le istruzioni che Docker compongono quando si gestisce i contenitori. Qui, definisci i servizi che finiscono per essere contenitori. Definisci anche le reti e i volumi da cui dipendono i servizi.
Il file Docker Compose utilizza la sintassi YAML e devi salvare come docker.YML. Puoi avere servizi per backend, frontend, database e code di messaggi in un'app Web. Questi servizi avranno bisogno di dipendenze specifiche. Dipendenze come reti, porte, archiviazione per un funzionamento ottimale. Tutto ciò che è necessario per l'intera applicazione verrà definito nel file di compositore Docker.
Hai bisogno di una comprensione di base della sintassi YAML per scrivere il tuo file di composizione. Se non ne hai familiarità, dovrebbe volerci meno di un'ora. Ci saranno molti abbinamenti o direttive del valore chiave nel tuo file. Quelli di alto livello sono:
Tuttavia, verranno discussi solo la versione e i servizi, in quanto è possibile definire gli altri due nella direttiva sui servizi.
Versione
Quando scrivi il tuo file, definirai prima la versione. Come al momento della stesura, Docker Compose ha solo versioni 1, 2 e 3. Non sorprende che sia la versione consigliata da utilizzare in quanto ha alcune differenze rispetto alle versioni precedenti.
È possibile specificare la versione da utilizzare per Docker Composition nel file come visualizzato di seguito:
Servizi
La chiave di servizio è probabilmente la chiave più importante in un file di compositore Docker. Qui, si specificano i contenitori che desideri creare. Ci sono molte opzioni e tonnellate di combinazioni per la configurazione di contenitori in questa sezione del file. Queste sono alcune opzioni che puoi definire nella chiave dei servizi:
Nel resto di questa sezione, imparerai come ciascuna di queste opzioni influisce sui contenitori.
Immagine
Questa opzione definisce quale immagine utilizza il servizio. Utilizza la stessa convenzione che usi quando si estrae un'immagine da Dockerhub in un file Docker. Ecco un esempio:
Immagine: Postgres: ultimo
Tuttavia, non vi è alcuna restrizione all'utilizzo dei file Dockerhub. Puoi anche creare immagini dalla tua macchina tramite il file Docker Compose, utilizzando un Dockerfile. Puoi usare le direttive "build", "contesto" e "dockerfile" per farlo.
Ecco un esempio:
costruire:
contesto: .
Dockerfile: Dockerfile
Il "contesto" dovrebbe contenere il percorso della directory con Dockerfile. Quindi "Dockerfile" contiene il nome di Dockerfile da utilizzare. È convenzionale nominare sempre i tuoi Dockerfiles come "Dockerfile", ma questo dà l'opportunità di usare qualcosa di diverso. Dovresti notare che questo non è l'unico modo per utilizzare un'immagine tramite un file Docker.
Container_name
Docker assegna nomi casuali ai contenitori. Ma potresti desiderare di avere nomi personalizzati per i contenitori. Con il tasto "Container_name", è possibile fornire nomi specifici ai contenitori, anziché ai nomi generati in modo casuale.
Ecco un esempio:
Container_Name: Linuxhint-app
Tuttavia, c'è una cosa di cui dovresti stare attento: non dare lo stesso nome a più servizi. I nomi dei container devono essere univoci; ciò farà fallire i servizi.
Ricomincia
L'infrastruttura software è condannata a fallire. Con la conoscenza di ciò, è più facile pianificare il recupero da questo fallimento. Ci sono molte ragioni per cui un contenitore fallisce, quindi la chiave di riavvio dice al contenitore di svegliarsi o no. Hai le seguenti opzioni, no, sempre, on-failure e se non ti fermano. Queste opzioni implicano che un contenitore non si riavvierà mai, si riavvierà sempre, si riavvierà solo sul fallimento o solo quando è fermato.
Ecco un esempio:
Riavvia: sempre
Dipende da
Servizi funzionanti in isolamento. Ma praticamente, i servizi non possono fare molto in isolamento. Ci deve essere una dipendenza da altri servizi. Ad esempio, il servizio back -end di un'app Web dipenderà da database, servizi di memorizzazione nella cache, ecc. Nella chiave "dipende_on", è possibile aggiungere le dipendenze.
Ecco un esempio:
dipende da:
- db
Fare questo significa che Docker Compose inizierà quei servizi prima di quello attuale. Tuttavia, non assicura che tali servizi siano pronti per l'uso. L'unica garanzia è che i container inizieranno.
Ambiente
Le applicazioni dipendono da determinate variabili. Per la sicurezza e la facilità d'uso, li estrai dal codice e li si imposta come variabili di ambiente. Esempi di tali variabili sono tasti API, password e così via. Questi sono comuni nelle applicazioni Web. Si noti che questa chiave funziona solo se non esiste una direttiva "build" in quel servizio. Quindi, crea l'immagine in anticipo.
Guarda questo:
ambiente:Se hai intenzione di utilizzare la direttiva "build" indipendentemente, dovrai definire le variabili di ambiente in una direttiva "Args". La direttiva "Args" è una sotto-direzione di "build".
Ecco un esempio:
costruire:Porti
Nessun contenitore funziona in modo isolato nonostante corre separatamente dagli altri. Per fornire un collegamento per comunicare con il "mondo esterno", è necessario mappare le porte. Mappini la porta del contenitore Docker alla porta host effettiva. Da Docker, potresti aver incontrato l'argomento "-P" che viene utilizzato per mappare le porte. La direttiva delle porte funziona in modo simile all'argomento "-p".
Porte:
- "5000: 8000"
Volumi
I contenitori Docker non hanno alcun mezzo per archiviare i dati in modo persistente, quindi perdono i dati quando si riavviano. Con volumi, puoi aggirare questo. I volumi consentono di creare un'archiviazione dei dati persistente. Lo fa montando una directory dall'host Docker nella directory del contenitore Docker. Puoi anche configurare i volumi come servizi di alto livello.
Ecco un esempio:
Volumi:
- host-dir:/test/directory
Ci sono molte opzioni disponibili durante la configurazione dei volumi, puoi verificarli.
Reti
Le reti possono anche essere create nei servizi. Con la chiave delle reti, è possibile impostare il networking per i singoli servizi. Qui, è possibile configurare il driver utilizzato dalla rete, se consente IPv6, ecc. Puoi anche impostare reti come i servizi, proprio come i volumi.
Ecco un esempio:
reti:
- predefinito
Ci sono molte opzioni quando si configurano reti, puoi verificarle.
Punto d'entrata
Quando si avvia un contenitore, spesso devi eseguire determinati comandi. Ad esempio, se il servizio è un'applicazione Web, è necessario avviare il server. Il tasto EntryPoint ti consente di farlo. L'ingresso funziona come un ingresso in Dockerfile. L'unica differenza in questo caso è che qualunque cosa tu definisca qui sovrascrive le configurazioni di entrata nel file Docker.INCETTO: FLASK RUN
Ecco un esempio:
INCETTO: FLASK RUN
Comandi di compositore Docker
Dopo aver creato un file Docker-Opse, è necessario eseguire determinati comandi per ottenere la composizione per funzionare. In questa sezione, imparerai alcuni importanti comandi di compositore Docker. Sono:
Docker-Opse Up
Questo comando Docker-Opgose aiuta a creare l'immagine, quindi crea e avvia contenitori Docker. I contenitori provengono dai servizi specificati nel file di compose. Se i container sono già in esecuzione e si esegue un documento, ricrea il contenitore. Il comando è:
Docker-Opse UpDocker-compose inizio
Questo comando Docker-Opgose avvia contenitori Docker, ma non crea immagini né crea contenitori. Quindi inizia i contenitori solo se sono stati creati prima.
Stop Docker-Opse
Spesso dovrai fermare i contenitori dopo averli creati e avviati. Ecco dove è utile il comando Stop Docker-Opse. Questo comando sostanzialmente interrompe i servizi in esecuzione, ma i contenitori e le reti di installazione rimangono intatti.
Il comando è:
Docker-compone
Il comando Docker-Opse Down interrompe anche i contenitori Docker come il comando STOP. Ma va il miglio in più. Docker-Opse Down, non ferma solo i contenitori, li rimuove anche. Le reti, i volumi e le immagini Docker effettive possono anche essere rimosse se si utilizzano determinati argomenti. Il comando è:
Docker-componeSe si intende rimuovere i volumi, si specifica aggiungendo -volumi. Per esempio:
Docker-compongono-Volumi
Se si intende rimuovere le immagini, si specifica aggiungendo -RMI tutto O -RMI locale. Per esempio:
docker-compose giù-rmi tutto
docker-compose giù-rmi locale
Dove Tutto Causa Docker Comporre rimuovere tutte le immagini e Locale Fa sì che Docker Comy si rimuova solo le immagini senza un tag personalizzato set da parte del campo "Immagine".
Pausa docker
Ci sono scenari in cui devi sospendere un contenitore, senza ucciderlo o eliminarlo. Puoi raggiungere questo obiettivo con il comando Docker-Opse Pause. Fa una pausa le attività di quel contenitore, quindi puoi riprenderle quando vuoi. Il comando è:
pausa dockerDocker-Opse Unpause
L'impasto di Docker-Ongose è l'opposto del comando di pausa docker. È possibile utilizzarlo per riprendere i processi sospesi a seguito dell'utilizzo della pausa da docker. Il comando è:
Docker-Opse UnpauseDocker-compose ps
Docker-compose PS Elenca tutti i contenitori creati dai servizi nel file Docker-Opse. È simile a Docker PS che elenca tutti i contenitori in esecuzione sull'host Docker. Tuttavia, PS Docker-Opse è specifico per i contenitori dal file di compositore Docker. Il comando è:
docker-compose psRiunendo tutto insieme
Ora che hai visto alcuni dei concetti chiave dietro un file di compositore Docker, mettiamo tutto insieme. Di seguito è riportato un file di composizione Docker di esempio per un'applicazione Web Python Django. Vedrai una rottura di ogni riga in questo file e vedrai cosa fanno.
Versione: '3'
Servizi:
DB:
Immagine: Postgres
ragnatela:
costruire: .
Comando: Python Gesty.Py Runserver 0.0.0.0: 8000
Volumi:
- .:/codice
Porte:
- "8000: 8000"
dipende da:
- db
Il racconto è che con questo file di composizione Docker, viene creato un database PostgreSQL e viene avviato un server Django.
La lunga storia è:
Conclusione
Non è necessario essere un esperto di Docker per utilizzare Docker Compose. Come principiante che non intende padroneggiare questo strumento, va bene imparare ciò di cui hai bisogno da solo. In questo articolo, hai imparato le basi di Docker Compose. Ora, capisci perché è necessario Docker Commy. È eccitante conoscere queste cose, ma la vera gioia viene dal metterle alla pratica. È ora di mettersi al lavoro.