Agli sviluppatori come lavorare con Docker per la sua flessibilità e facilità d'uso. Quando si creano applicazioni, vale la pena investire il tempo extra ottimizzando le immagini Docker e DockerFiles. L'ottimizzazione aiuterà i team a condividere immagini più piccole, a migliorare le prestazioni e semplificare il debug di problemi. Di seguito sono riportati alcuni consigli per la creazione di immagini migliori e file di Docker.
Ottimizzazione delle immagini Docker
Le grandi immagini Docker possono rendere difficile condividere. Inoltre, le grandi immagini rallentano l'esecuzione. Quindi, l'ottimizzazione delle immagini può aiutare con il processo di sviluppo generale e produzione.
Le immagini disponibili su Docker Hub sono già ottimizzate. Invece di costruire il tuo, è una buona idea utilizzare le immagini ottimizzate disponibili. Ad esempio, se hai bisogno di un'immagine Redis, hai la possibilità di costruirla su un'immagine Ubuntu o scaricare direttamente quello Redis. L'uso dell'immagine Redis già costruita è un'opzione migliore perché gli sviluppatori si sono già presi cura di eventuali pacchetti ridondanti.
La nuova opzione a più stadi in Docker (dalla versione 17.05) può aiutarti a creare modi intelligenti per ottimizzare le tue immagini. È possibile creare un'applicazione e quindi trasferirla in un nuovo ambiente pulito per la distribuzione. Garantirà che solo le librerie e le dipendenze necessarie sono parte dell'immagine finale.
Quando si costruisce un'immagine, presta attenzione ai livelli creati da Dockerfiles. Ogni comando di esecuzione crea un nuovo livello. Quindi combinare gli strati può ridurre la dimensione dell'immagine. Un semplice esempio è l'apt-get. In generale, gli utenti eseguono il comando in questo modo:
Esegui Apt -get -y Aggiornamento |
Esegui Apt -get Installa -y Python |
Creerà due livelli. Ma combinare i comandi creerà un singolo livello nell'immagine finale:
Esegui apt -get -y update && apt -get install -y python |
Quindi, combinazioni intelligenti di comandi possono portare a immagini più piccole.
Docker cache immagini. Se hai bisogno di più istanze degli stessi livelli, è una buona idea guardare all'ottimizzazione dei livelli e alla creazione di un'immagine di base personalizzata. Accelererà i tempi di caricamento e renderà più semplice la traccia.
Le immagini di prova richiedono più strumenti e librerie per testare le funzionalità. È una buona idea utilizzare l'immagine di produzione come base e creare immagini di prova sopra di essa. I file di test non necessari saranno al di fuori della base. Quindi le immagini di produzione rimarranno piccole e pulite per la distribuzione.
L'archiviazione dei dati dell'applicazione nel contenitore sarà in mongolfiera. Per gli ambienti di produzione, utilizzare sempre la funzione volume per mantenere il contenitore separato dai dati.
Best practice per la scrittura di fikerfile
Dockerfiles consente agli sviluppatori di codificare i processi. Quindi, è un ottimo strumento per migliorare il processo di costruzione di immagini Docker. Ecco alcune pratiche che ti aiuteranno a migliorare il tuo sviluppo.
Prova a progettare contenitori facili da creare e distruggere. Se i contenitori sono troppo dipendenti da ambienti e configurazioni periferici, sono più difficili da mantenere. Quindi la progettazione di contenitori apolidi può aiutare a semplificare il sistema.
Se hai una build complicata che passa in modo ricorsivo più directory, tutti i file e le directory vengono inviati al demone Docker. Può provocare immagini più grandi e tempi di costruzione più lenti. Puoi usare il .Dockerignore per escludere file e cartelle non necessarie che complicano il processo di build.
Le build multi-stage sono una nuova funzionalità Docker dalla versione 17.05. Consente agli sviluppatori di creare più immagini nello stesso Dockerfile e spostare artefatti da un contenitore all'altro nello stesso Dockerfile. Quindi puoi avere artefatti più piccoli e ottimizzati nell'immagine finale senza usare script complicati per raggiungere gli stessi risultati.
Dockerfile dovrebbe installare solo i pacchetti minimi indispensabili necessari per eseguire i servizi. Ogni pacchetto richiede spazio nell'immagine. Quindi alcune applicazioni come il ping o l'editor di testo potrebbero non essere necessarie nel contesto del servizio che verrà eseguito sul contenitore. Comprendere i requisiti di un determinato servizio può aiutarti a scrivere migliori file Docker in grado di creare immagini ottimizzate.
Progettare file Docker con l'architettura di microservizi può essere utile. Non è sempre possibile distribuire un processo per contenitore. Ma gli sviluppatori possono pensare a come distribuire i propri processi in modo più proattivo e prendere decisioni che aiuteranno a distribuire i servizi in modo disaccoppiato. I contenitori si adattano naturalmente al design modulare. Quindi i tuoi fikerfile dovrebbero sfruttare le opportunità che Docker offre.
Esegui, copia e aggiungi solo Dockerfile Crea nuovi livelli dalla versione 1.10. Altre istruzioni non influiscono direttamente sulla dimensione delle immagini finali. Quindi dovresti essere vigile quando usano questi comandi. Inoltre, la combinazione di più comandi può ridurre il numero di livelli. Meno strati significano dimensioni più piccole.
Ogni volta che hai un argomento multi-line, ordina gli argomenti in modo alfanumericamente per migliorare la manutenzione del codice. Gli argomenti casuali possono portare a duplicazioni. Sono anche più difficili da aggiornare. Un buon esempio:
Esegui Apt-get Update && Apt-get Install -y \ |
apache2 \ |
idiota \ |
iputils-ping \ |
Python \ |
Se stai usando da [ImageName]: più recente, puoi riscontrare problemi ogni volta che l'immagine cambia. Può diventare un problema difficile da tracciare. L'uso di tag specifici può assicurarti di conoscere l'immagine esatta utilizzata dal registro Docker.
I comandi Dockerfile sono eseguiti consecutivamente per creare immagini e costruisce solo livelli che non sono già presenti. Supponiamo che tu abbia un pacchetto.JSON per NPM e requisiti.txt per pip. Puoi scrivere il seguente Dockerfile in cui il pacchetto.JSON e requisiti.txt sono nella cartella MyCode:
COPIA ./mycode//home/programma/ |
Esegui l'installazione NPM |
Esegui i requisiti di installazione PIP -R |
Tuttavia, ogni volta che c'è una modifica in uno qualsiasi dei file in MyCode, entrambi i comandi di esecuzione devono essere ricostruiti. Invece, se il codice è scritto nel modo seguente:
COPIA ./mycode/pacchetto.JSON/Home/Programma/Pacchetto.JSON |
Workdir /home /programma |
Esegui l'installazione NPM |
COPIA ./MyCode/Requisiti.txt/home/programma/requisiti.TXT |
Workdir /home /programma |
Esegui i requisiti di installazione PIP -R |
Quindi, i comandi di esecuzione saranno indipendenti l'uno dall'altro e cambieranno in un singolo file nella cartella MyCode non influenzerà entrambi i comandi NPM e PIP RUN. Guardare dipendenze come questa può aiutarti a scrivere migliori fikerfiles.
Le tecniche di cui sopra e le migliori pratiche dovrebbero aiutarti a costruire immagini Docker più piccole e scrivere migliori file di Docker. Ecco link per aiutarti a scoprire ulteriori informazioni su diversi argomenti:
https: // linuxhint.com/install-and-us-docker-on-ubuntu/