GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come ottimizzare le prestazioni Docker

Introduzione

I container Docker sono progettati per essere eseguiti ovunque:in un data center interno, nel cloud o in un ambiente ibrido e multi-cloud. Di default, i container Docker tendono a superare altri metodi di virtualizzazione, ma possono essere ulteriormente ottimizzati per offrire prestazioni ancora migliori.

Questo articolo illustra i motivi alla base delle prestazioni Docker non ottimali in alcuni scenari e offre soluzioni da applicare al sistema per ottimizzare le distribuzioni Docker.

Cosa causa il rallentamento delle prestazioni della Docker?

Docker è un sistema complesso che dipende da molteplici fattori, comprese le configurazioni dell'host e la qualità della rete. Di seguito sono riportati alcuni dei motivi più comuni per cui Docker è lento.

Risorse allocate in modo inadeguato

Quando i container Docker non hanno accesso a risorse sufficienti, si verificano rapidamente problemi di prestazioni. A seconda della dimensione media dell'immagine di un progetto e del numero di container in esecuzione, gli host e la rete devono essere in grado di supportare il carico di lavoro.

Dimensioni immagine Docker

Docker utilizza le immagini per creare contenitori. Le immagini sono costituite dal codice sorgente, dalle librerie e dalle dipendenze necessarie per il corretto funzionamento dell'app. Un contenitore Docker creato da un'immagine è un ambiente stabile per lo sviluppo e il test.

Tuttavia, le immagini Docker ingombranti consumano molte risorse e monopolizzano l'intero sistema. Poiché la dimensione dell'immagine è un termine relativo e dipende dalle esigenze di una particolare applicazione, questa affermazione si riferisce principalmente a quanto l'immagine è ottimizzata o gonfia di file non necessari .

Dimensioni del contesto del file Docker

La docker build Il comando utilizza due origini per creare un'immagine:un Dockerfile e un contesto. Un contesto è l'insieme di file in una posizione specificata a cui può fare riferimento il processo di compilazione. Se le dimensioni del contesto sono troppo grandi, le prestazioni in fase di compilazione potrebbero risentirne.

Configurazione Docker predefinita ancora in uso

Anche se la configurazione predefinita di Docker fornisce parametri ragionevoli per consentire a Docker di funzionare immediatamente, ogni sistema è specifico. Opzioni di avvio del demone configurate in modo errato, rete e altri parametri possono peggiorare le prestazioni di Docker.

Latenza di rete

A meno che tu non crei il tuo registro, Docker utilizzerà Dockerhub per recuperare le immagini direttamente. Lo spostamento di una grande quantità di dati su Internet fa sì che la latenza di rete diventi un fattore nelle prestazioni generali di Docker.

Come ottimizzare le prestazioni Docker

Esistono diversi modi per velocizzare le prestazioni di Docker, dai miglioramenti hardware alle modifiche all'interno di Docker stesso.

Assegna correttamente le risorse

Le prestazioni della macchina host influenzano le prestazioni dei contenitori. Una CPU lenta o una RAM insufficiente possono diventare un collo di bottiglia, rallentando le prestazioni di Docker.

Quando si verificano prestazioni lente di Docker, controllare la CPU, l'utilizzo della memoria e lo spazio disponibile su disco. Considerare l'aggiornamento del sistema se un componente non funziona come previsto.

Quando si ha a che fare con un container specifico con prestazioni peggiori del previsto, può essere utile controllare le metriche specifiche del container.

Le docker stats comando visualizza i dati della metrica importanti sui contenitori in esecuzione. Usalo per diagnosticare potenziali problemi.

docker stats

L'output del comando mostra:

  • Utilizzo della CPU.
  • Utilizzo della memoria e limite per contenitore.
  • Percentuale di consumo di memoria.
  • NET I/O - Traffico di rete Docker.
  • BLOCK I/O - Dati scritti sui dispositivi a blocchi host.
  • PIDS - Il numero di thread creati da un container.

Ottimizza le immagini Docker

Innanzitutto, controlla le dimensioni dell'immagine creata utilizzando il seguente comando:

docker images

L'output elenca il repository dell'immagine, il tag, l'ID, l'ora dalla creazione e le dimensioni:

Controlla il Dockerfile dell'immagine e assicurati che il contesto del file non sia troppo grande. Il contesto elenca i file di cui Docker ha bisogno per creare un contenitore.

La dimensione del contesto viene visualizzata nell'output della docker build comando:

docker build -t [image-name] .

Nell'esempio seguente, la dimensione del contesto è 4,641 MB:

Se il contesto di compilazione dell'immagine è troppo grande, crea un .dockerignore file nella directory principale del contesto e aggiungervi i file non necessari. Docker ignorerà i file elencati lì quando crea l'immagine.

Ecco un esempio di .dockerignore file:


temp*
*/temp*

La prima riga dice a Docker di escludere dal contesto tutti i file e le directory i cui nomi iniziano con temp nella directory principale. Il secondo fa lo stesso per qualsiasi sottodirectory della radice.

Verifica le dipendenze

Durante l'installazione delle dipendenze, le immagini Docker basate su Debian possono generare file e binari aggiuntivi. Alcune di queste interdipendenze non sono necessarie per il normale funzionamento del contenitore e possono essere rimosse.

Per rimuovere manualmente le interdipendenze non necessarie, utilizza i comandi elencati di seguito.

Rimuovi i pacchetti in /var/cache :

apt clean

Rimuovere i pacchetti obsoleti:

apt autoclean

Rimuovere le interdipendenze utilizzate dai pacchetti rimossi:

apt autoremove

Considera il passaggio all'architettura di microservizi

Le applicazioni monolitiche tendono a essere più lente delle applicazioni create utilizzando l'architettura di microservizi. Se i tuoi contenitori Docker hanno difficoltà a funzionare, potrebbe essere dovuto alle dimensioni dell'app all'interno del contenitore. La migrazione dell'app ai microservizi consente di suddividere il carico di lavoro tra più contenitori.

Utilizza risorse dedicate

Negli ambienti cloud, le VM spesso condividono le risorse hardware con altre VM sullo stesso server. Tuttavia, l'hosting di container sull'hardware dedicato di Bare Metal Cloud elimina il sovraccarico di virtualizzazione e migliora le prestazioni dei container. Le app containerizzate non condividono risorse di sistema come RAM e CPU, il che non riduce la latenza e consente alle app di utilizzare completamente l'hardware.

Utilizza un sistema operativo leggero

I sistemi operativi completi come Windows, macOS o distribuzioni Linux commerciali consumano gran parte delle risorse di sistema, lasciando meno del necessario per prestazioni ottimali di Docker. Le distribuzioni leggere come RancherOS, CoreOS Container Linux, Alpine Linux e VMware Photon OS sono state ottimizzate per funzionare con i container Docker. La creazione di immagini su un sistema leggero può risparmiare fino a 100 MB della dimensione dell'immagine finale, migliorando notevolmente la velocità.

Memorizza livelli di file Docker

Usa la cache dei livelli per migliorare la velocità di creazione dell'immagine. Quando Docker inizia a creare un'immagine, cerca nella cache i livelli che contengono firme simili e li usa nel processo. Questa funzione velocizza il processo di costruzione.

Se desideri specificare l'immagine preesistente come origine della cache, utilizza il --cache-from opzione:

docker build --cache-from [image-to-cache-from] -t [next-build] -f [path-to-dockerfile]

Docker
  1. Come installare Docker su CentOS 7

  2. Come installare Docker su Raspberry Pi

  3. Come installare Docker su Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  4. Come installare Docker in CentOS

  5. Come installare Jenkins con Docker

Come installare Docker su Ubuntu 20.04, 18.04, 21.04

Come installare Docker su CentOS 7

Come installare Docker su Ubuntu 14.04

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come installare Docker su Mac