Una guida per principianti a Docker Compose

Una guida per principianti a Docker Compose
Docker Compose è uno degli strumenti più utili per gli sviluppatori di software e gli amministratori di sistema. Molti lavori richiedono a qualcuno con conoscenza di questa tecnologia, quindi Docker e Docker Compose sono caldi nello spazio DevOps. Senza dubbio, sapere come utilizzare queste tecnologie andrà a beneficio della tua carriera IT.

Se sei un principiante a Docker composi, ma hai una certa conoscenza di Docker, questo articolo fa per te. Potrai imparare:

  • Cos'è la composizione di Docker?
  • Confronti popolari
  • Docker Compose vs Kubernetes
  • Docker Compose vs Docker Swarm
  • Installazione di docker
  • Il docker-compose.File YML
  • Comandi docker-compose

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.

Cos'è la composizione di Docker?

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:

  • Iscrizione
  • Registrazione
  • Resetta la password
  • Storia
  • Grafico

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
  • Docker Compose vs Docker Swarm

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:

  • Versione
  • Servizi
  • Rete
  • Volumi

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:

  • Versione: "3"
  • Versione: “2.4 "
  • Versione: “1.0 "

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:

  • Immagine
  • Container_name
  • Ricomincia
  • Dipende da
  • Ambiente
  • Porti
  • Volumi
  • Reti
  • Punto d'entrata

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:
Api-Key: "The-Api-Key"
Config: "sviluppo"
Session_secret: "The-Secret"

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:
contesto: .
Args:
Api-Key: "The-Api-Key"
config: "sviluppo"
Session_secret: "The-Secret"

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
  • Docker-compone
  • Docker-compose inizio
  • Stop Docker-Opse
  • Pausa docker
  • Docker-Opse Unpause
  • Docker-compose ps

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 Up

Docker-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 è:

Stop Docker-Opse

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-compone

Se 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 docker

Docker-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 Unpause

Docker-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 ps

Riunendo 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 è:

  1. Questo file utilizza la versione 3 di docker.
  2. Crea due servizi. Il DB e i servizi Web.
  3. Il servizio DB utilizza l'immagine ufficiale di Docker Postgres.
  4. Il servizio Web crea la propria immagine dalla directory corrente. Dal momento che non definisce il contesto e le chiavi Dockerfile, Dockerfile dovrebbe essere nominato "Dockerfile" dalla Convenzione.
  5. Viene definito il comando che verrà eseguito dopo l'avvio del contenitore.
  6. Il volume e le porte sono definite. Entrambi usano la convenzione dell'host: mappatura dei container.
  7. Per volume, la directory corrente "."È mappato nella directory"/code "all'interno del contenitore. Questo aiuta i dati nel contenitore a diventare persistenti, quindi non si perdono ogni volta che inizia il contenitore.
  8. Per la porta, la porta 8000 dell'host è mappata sulla porta del contenitore 8000. Si noti che l'app Web funziona sulla porta 8000. Quindi, è possibile accedere all'app Web sull'host attraverso quella porta.
  9. Infine, il servizio Web dipende dal servizio DB. Quindi, il servizio Web inizierà solo quando il contenitore DB è iniziato.
  10. Maggiori informazioni su Dockerfile per l'applicazione Django e il file Docker Compose può essere ottenuto dalla documentazione.

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.