Quando evitare Docker

Quando evitare Docker. Docker, la popolare piattaforma di containerizzazione, offre numerosi vantaggi, ma è essenziale essere consapevoli anche dei suoi limiti. Esploriamo ciò che non è molto popolare a causa di alcuni svantaggi di Docker e comprendere meglio quando conviene usare e quando Quando evitare Docker.

L’archiviazione in Docker è ancora difficile

Presto saranno disponibili migliori opzioni di archiviazione per i contenitori Docker. Tuttavia, al momento non esiste un modo veramente semplice per connettere i contenitori allo storage e questo è il principale svantaggio della containerizzazione Docker. I volumi di dati Docker richiedono un’ampia distribuzione dell’host e una configurazione manuale. Risolvono il problema dello spazio di archiviazione, ma non in modo molto intuitivo o efficiente.

Problemi di sicurezza

I contenitori Docker non sono segmentati, il che significa che più contenitori possono essere vulnerabili agli attacchi del sistema host. Pratiche di sicurezza adeguate sono fondamentali per mitigare i rischi.

Orchestrazione limitata

Gestire più contenitori in modo efficace senza funzionalità di orchestrazione può essere difficile. Gli sviluppatori potrebbero aver bisogno di strumenti o piattaforme aggiuntivi per un’orchestrazione efficiente.

Le app grafiche non funzionano bene

Docker è stato progettato per fornire un metodo per la distribuzione di applicazioni server che non richiedono un’interfaccia utente grafica. Sebbene esistano varie tecniche intelligenti per eseguire il software GUI in un contenitore, queste soluzioni non sono infallibili nell’affrontare le carenze della containerizzazione Docker.

Garantire la compatibilità multipiattaforma

Il problema principale è che un programma creato per essere eseguito in un contenitore Docker su Linux non funzionerà su Windows e viceversa. Questa limitazione non si applica alle macchine virtuali. Questa limitazione rende Docker meno adatto ad alcune configurazioni estremamente diverse che coinvolgono sia sistemi Windows che Linux.

Documentazione obsoleta

L’ampia documentazione di Docker non sempre tiene il passo con gli aggiornamenti della piattaforma. Gli sviluppatori potrebbero dover affrontare problemi a causa di informazioni obsolete o incomplete.

Ripida curva di apprendimento:

Sebbene iniziare con Docker sia relativamente semplice, padroneggiarlo può essere difficile per gli sviluppatori con infrastrutture diverse.

La curva di apprendimento può essere ripida, soprattutto per chi è nuovo alla containerizzazione.

Quando evitare Docker?

Nessuno dei casi seguenti (tranne forse l’ultimo) rende automaticamente Docker inutile per il tuo progetto. Ma quando riscontriamo uno di questi problemi, dovremmo riconsiderare se Docker sia la soluzione migliore per lo sviluppo del nostro software. Meglio pensarci due volte prima di adottare Docker. Analizziamo le situazioni di seguito per capire Quando evitare Docker.

Il prodotto software è un’applicazione desktop

Docker è molto utile per le applicazioni Web in esecuzione su un server o su un software basato su console. Ma se il nostro prodotto è un’applicazione desktop standard, soprattutto con una GUI ricca, Docker potrebbe non essere la scelta migliore. Docker è stato inizialmente creato come soluzione per la distribuzione di applicazioni server che non richiedono un’interfaccia utente grafica (GUI). Sebbene possiamo optare per alcune strategie creative (come l’inoltro video X11) per eseguire un’app GUI all’interno di un contenitore, queste soluzioni sono nella migliore delle ipotesi ingombranti. Sebbene sia tecnicamente possibile creare un’app di questo tipo con Docker, non è l’ambiente naturale per l’esecuzione di software con un’interfaccia grafica e richiede soluzioni alternative aggiuntive. Fondamentalmente, se vogliamo gestire i contenitori Docker, dobbiamo prepararci a lavorare con la riga di comando per eseguire tutte le azioni lì.

Il nostro progetto è relativamente piccolo e semplice

Docker è davvero utile se il nostro software è composto da più parti. Rende più semplice installare e tenere traccia di tutte le dipendenze. Ma non esce così fuori dagli schemi. Qualcuno deve preparare la configurazione iniziale del progetto per Docker (Dockerfiles, docker-compose.yml, punti di ingresso, ecc.) e mantenerla in futuro. Pertanto, se la nostra app è relativamente semplice e non richiede strumenti o servizi aggiuntivi, possiamo iniziare senza Docker. Può essere aggiunto in seguito quando il nostro software cresce.

Il nostro team di sviluppo è composto da uno sviluppatore

Se il nostro team di sviluppo è semplicemente una sola persona, i vantaggi di Docker saranno minori. Docker aiuta a garantire che tutti gli sviluppatori abbiano accesso a tutti i componenti necessari del software su cui lavorano. Quindi, se qualcuno aggiunge dipendenze software, tutti le avranno quando necessario. Se si tratta di un solo sviluppatore, questo non è necessario. Ma anche in tale caso Docker può essere di aiuto, ad esempio se l’unico sviluppatore si dimette e qualcuno deve subentrare nel progetto. Ma questo può invece essere gestito con la documentazione adeguata. Docker semplicemente automatizza tutto ciò, ma minore è il numero di persone nel team, minore è la necessità di automazione.

Stiamo cercando una soluzione per velocizzare la nostra richiesta

Docker può accelerare significativamente il processo di sviluppo, ma non necessariamente la nostra app stessa. Anche se aiuta a rendere scalabile la nostra applicazione, in modo che più utenti possano utilizzarla, la singola istanza della nostra app sarà solitamente solo leggermente più lenta rispetto a non utilizzare Docker. Fortunatamente, i contenitori Docker sono più piccoli, ad esempio, delle macchine virtuali e richiedono molte meno risorse. Nella maggior parte dei casi, il sovraccarico prestazionale di Docker non sarà visibile, ma se il nostro obiettivo è aumentare la velocità della nostra app, Docker stesso non sarà la soluzione.

Il nostro team di sviluppo è composto principalmente da utenti MacBook

Parlando di velocità, Docker presenta seri problemi di prestazioni quando viene eseguito sul sistema operativo Mac. Questi sono legati al modo in cui i volumi vengono montati e al filesystem osxfs sottostante. In breve, se la nostra app esegue molte operazioni di lettura/scrittura del disco (e quasi tutte le app ne eseguono alcune) potrebbe essere molto, molto lenta su Mac. Quindi, se il nostro team di sviluppo è composto da fan di Apple, Docker potrebbe non essere la soluzione migliore. Fortunatamente, ci sono alcune cose che gli utenti MacBook possono fare per migliorare la loro esperienza con Docker.

Il nostro team non sa come utilizzare correttamente Docker

Ultimo e forse il caso più importante in cui non dovremmo utilizzare il desktop Docker. Docker può funzionare a meraviglia e accelerare notevolmente il processo di sviluppo. Ma potrebbe anche diventare il nostro incubo, se non viene utilizzato correttamente. Immagini Docker molto grandi che si avviano per molti minuti. Difficile eseguire il debug di problemi che non producono log utili. Problemi di sicurezza quando si utilizzano immagini Docker casuali di terze parti. Sviluppatori che installano le dipendenze sul proprio computer e non nelle immagini Docker. Configurazione Docker mista a comandi manuali aggiuntivi da eseguire. Tutto ciò può causare molta frustrazione, problemi e, alla fine, può costare denaro reale. Quindi, se il nostro team di sviluppo non sa come utilizzare correttamente Docker, non usiamolo solo perché “lo usano tutti”.

Quando le prestazioni sono fondamentali

Docker introduce un sovraccarico dovuto alla containerizzazione, che potrebbe influire sulle prestazioni. In ambienti con risorse limitate, i processi Docker potrebbero essere presi di mira dal killer della memoria insufficiente del sistema operativo, causando errori delle applicazioni. Consideriamo altre opzioni quando le prestazioni sono una priorità assoluta.

Molti dati persistenti

I contenitori Docker sono progettati per essere temporanei per impostazione predefinita. La gestione dei dati persistenti utilizzando i volumi può essere complessa e meno efficiente rispetto all’accesso diretto al filesystem host. Le letture o le scritture di file di volume elevato potrebbero subire un sovraccarico aggiuntivo. Se la nostra applicazione fa molto affidamento su dati persistenti, meglio cercare delle alternative.

Database in ambienti di produzione

È una buona idea eseguire database importanti nei contenitori Docker? In generale, diciamo che non dovremmo usare Docker per i database di produzione.

La regola generale è: come ridurre la complessità? Minori sono le incognite nel nostro stack, più facile sarà gestire i casi e rispondere agli incidenti.

I database sono servizi importanti. L’operazione richiede uno sforzo ancora maggiore per essere eseguita in modo affidabile. Se vuoi davvero che i tuoi dati rimangano al sicuro, qualunque cosa accada, non dobbiamo correre rischi inutili.

È noto che l’esecuzione di database con dati preziosi in Docker causava problemi in passato.

I tempi con strani errori di danneggiamento dei dati potrebbero essere finiti, ma l’aggiunta di un altro livello allo stack tecnologico può introdurre insidie ​​inutili durante l’esecuzione di un servizio importante e l’esecuzione di attività di manutenzione.

Soprattutto quando esistono modi alternativi per ottenere maggiore stabilità, meno sforzi e minori rischi. I servizi di database forniti da un fornitore di servizi cloud sono un’ottima opzione per i database di produzione (e questo significa anche offshoring per ragioni di parità di prodotto/processo). Utilizziamo RDS se utilizziamo AWS, Managed Databases on Digital Ocean o un servizio di database ospitato equivalente dal fornitore di servizi cloud. Questo semplifica molte attività amministrative, come: ad esempio l’aggiornamento di versioni minori, l’esecuzione di backup regolari e persino il ridimensionamento.

Sviluppo di strumenti e app locali

Docker brilla quando si creano servizi di lunga durata con dipendenze. Per gli strumenti e le app locali, in particolare quelli con una durata di vita breve, Docker potrebbe aggiungere complessità non necessarie. In questi casi è consigliabile prendere in considerazione approcci più semplici per lo sviluppo locale.

La sicurezza è la massima priorità

Sebbene Docker fornisca isolamento, è essenziale comprenderne le implicazioni sulla sicurezza. Se la nostra applicazione richiede misure di sicurezza rigorose, è meglio valutare altre soluzioni di containerizzazione.

Il nostro codebase è un monolite

Se la nostra applicazione è una codebase monolitica, suddividerla in microservizi utilizzando Docker potrebbe non essere semplice. Prendiamo in considerazione il refactoring o altre strategie di distribuzione.

Stiamo cercando di ridurre la complessità

A volte Docker introduce ulteriore complessità, soprattutto per piccoli progetti o implementazioni semplici. Valutiamo in questi casi se i vantaggi superano la complessità aggiuntiva.

Non siamo sicuri del motivo per cui stiamo containerizzando

Se non siamo sicuro dei vantaggi specifici della containerizzazione per il nostro progetto, facciamo un passo indietro. Comprendiamo le nostre esigenze ed esploriamo le alternative se necessario.

E’ un bene oppure no ? Quando evitare Docker?

Nonostante queste limitazioni, Docker rimane uno strumento potente per creare, testare, distribuire ed eseguire applicazioni containerizzate. Offre coerenza multipiattaforma, implementazione ad alta velocità e flessibilità, rendendolo uno degli strumenti preferiti nello sviluppo. Tuttavia, comprenderne gli aspetti negativi aiuta gli sviluppatori a prendere decisioni consapevoli sull’adozione o su Quando evitare Docker.

Ci auguriamo che con questo articolo il lettore abbia più informazioni su Quando evitare Docker nei propri progetti IT.

(fonte)

Innovaformazione, scuola informatica specialistica promuove la cultura dei container, dei microservizi , di Docker e Kubernetes in maniera consapevole. Nell’offerta formativa per le aziende trovate il Corso Microservices Docker Kubernetes.

INFO: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)

Ti potrebbe interessare

Articoli correlati