Giramo diversi contenitori per gestire carichi di lavoro diversi di un'applicazione e utilizziamo Docker Compose per farlo facilmente. Ogni carico di lavoro logicamente diverso è elencato come diverso servizio. Ad esempio, il server HTTP frontend verrà elencato come servizio frontend che esegue un'immagine Apache o un'immagine NGINX come contenitore.
Tutti i servizi, le loro esigenze di networking, i requisiti di archiviazione, ecc.File YML. Ci concentreremo sulla specifica dell'utilizzo della memoria qui.
Avresti bisogno dei seguenti strumenti nell'Arsenal per seguire:
Resteremo alla versione 2.4 per il nostro documento di composizione.File YML come supporta la versione 17.12 e più in alto del motore Docker e superiore. Avremmo potuto andare con la versione 3 che è più recente ma non supporta la vecchia sintassi di limitazione della memoria. Se si tenta di utilizzare la sintassi più recente, insiste invece sull'uso di Docker in modalità Swarm. Quindi, per mantenere la materia semplice per gli utenti Docker regolari, mi atterrò alla versione 2.4
La maggior parte del codice funzionerebbe allo stesso modo per la versione 3 e dove ci sarà una differenza, menzionerò la più recente sintassi per gli utenti Docker Swarm.
Applicazione di esempio
Proviamo a eseguire un semplice servizio NGINX sulla porta 80 utilizzando prima la CLI e poi un semplice documento.YML. Nella sezione successiva, esploreremo le sue limitazioni di memoria e l'utilizzo e modificheremo la nostra composizione Docker.YML per vedere come vengono imposte le limitazioni personalizzate.
Iniziamo un semplice server Nginx utilizzando Docker-Cli:
$ Docker run -d --name my -nginx -p 80:80 nginx: ultimoÈ possibile vedere il server Nginx funzionare visitando http: // localhost o sostituire lcoalhost
Con l'indirizzo IP del tuo host Docker. Questo contenitore può potenzialmente utilizzare l'intera memoria disponibile sul tuo host Docker (nel nostro caso è di circa 2 GB). Per controllare l'utilizzo della memoria, tra le altre cose, possiamo usare il comando:
$ Docker Statists My-NinxL'utilizzo/limite di MEM è a 2.133mib su totale 1.934gib. Rimuoviamo questo contenitore e iniziamo a scrivere script docker.
$ Docker Stop my-nginxFile YML equivalente
Il contenitore esatto come sopra può essere creato se seguiamo questi passaggi:
$ mkdir my-componeCreiamo una nuova directory vuota e creiamo un file Docker.YML in esso. Quando eseguiremo Docker-Opse da questa directory, cercherà questo file specifico (ignorando tutto il resto) e creerà di conseguenza la nostra distribuzione. Aggiungi i seguenti contenuti all'interno di questo .File YML.
Versione: '3'Il flag -d viene aggiunto in modo che i contenitori appena creati siano in background. Altrimenti, il terminale si collegherà ai contenitori e inizierà i rapporti di stampa da esso. Ora possiamo vedere le statistiche dei contenitori appena creati:
$ Docker Statists -allyNoterai che un contenitore simile come prima è stato creato con limiti di memoria simili e persino utilizzo. Dalla stessa directory che contiene il file YML. Esegui il seguente comando per eliminare il contenitore appena creato, insieme alla rete di bridge clienti creata.
$ Docker-compone
Ciò riporterà Docker a uno stato pulito, ad eccezione di eventuali volumi creati (non abbiamo creato nessuno, quindi non è una preoccupazione.)
Limiti di memoria e prenotazioni di memoria
I limiti di memoria e le prenotazioni di memoria sono due diversi aspetti per garantire un funzionamento regolare delle tue applicazioni e l'host Docker che stai eseguendo in cima.
In generale, il limite di memoria impone un limite superiore alla quantità di memoria che può potenzialmente essere utilizzata da un contenitore Docker. Per impostazione predefinita un contenitore Docker, come qualsiasi altro processo di sistema, può utilizzare l'intera memoria disponibile dell'host Docker. Questo può causare un'eccezione fuori memoria e il tuo sistema potrebbe benissimo crash. Anche se non arriva mai a questo, può comunque morire di fame altri processi (compresi altri contenitori) da risorse preziose, danneggiando nuovamente le prestazioni. I limiti di memoria assicurano che i contenitori affamati di risorse non superano un certo limite. Ciò limita il raggio di esplosione di un'applicazione scarsamente scritta a pochi contenitori, non all'intero host.
Le prenotazioni di memoria, d'altra parte, sono meno rigide. Quando il sistema è a corto di memoria e cerca di reclamarne parte. Cerca di portare il consumo di memoria del contenitore al limite di prenotazione o al di sotto. Se c'è abbondanza di memoria, tuttavia, l'applicazione può espandersi fino al limite di memoria set hard.
Riassumere:
Se la prenotazione della memoria è maggiore del limite di memoria, il limite di memoria ha la precedenza.
Specificare i limiti di memoria e la prenotazione
Versione 2
Torniamo al Docker-Opse.YML abbiamo scritto in precedenza e abbiamo aggiunto un limite di memoria ad esso. Cambia la versione in 2.4 per motivi discussi nella sezione Prerequisiti.
Versione: '2.4 'L'ultima riga imposta il limite per il servizio MY-NINX a 300MIB. Puoi usare K per Kib e G per Gib e B per solo byte. Tuttavia, il numero prima deve essere un numero intero. Non puoi usare valori come 2.4m, dovresti invece usare 2400k. Ora se corri:
$ Docker Stat -TuttiNoterai che il limite di memoria è impostato su 300 MIB. L'impostazione della prenotazione di memoria è altrettanto semplice, basta aggiungere una riga Mem_Reservation: xxx alla fine.
Versione: '2.4 'Versione 3 (opzionale)
Per utilizzare la versione tre è necessario eseguire Docker in modalità Swarm. Per Windows e Mac puoi abilitarlo utilizzando il menu Impostazioni Docker. Gli utenti di Linux dovrebbero andare a eseguire Docker Swarm init. Maggiori informazioni su questo possono essere trovate qui. Tuttavia, non è un passo necessario, e se non l'hai abilitato, va bene. Questa sezione è per le persone Già in esecuzione in modalità sciame e può utilizzare la versione più recente.
Versione: '3'Definiamo tutto questo in Opzione Risorse. I limiti e la prenotazione diventano le chiavi primarie e la memoria non è che una delle tante risorse gestite qui. La CPU è ancora un altro parametro importante.
Puoi saperne di più su Docker-Opse dalla documentazione ufficiale collegata qui. Una volta ottenuto l'essenza di come scrivere un file di composizione, la documentazione può aiutarti con i dettagli vari parametri.
Non devi sapere tutto, basta cercare ciò che la tua applicazione richiede e il riferimento ti guiderebbe nell'implementarlo.