Cos'è Docker?
Dalla sua uscita nel 2012, Docker è diventata una delle tecnologie in più rapida crescita nello sviluppo web e devops. Come ogni nuova tecnologia, tuttavia, è ancora in fase di sviluppo, presenta alcune limitazioni e non è adatta a tutti i progetti. Questa guida fornisce una panoramica dei pro e dei contro di Docker in modo che tu possa decidere se sarebbe una buona aggiunta al tuo progetto.
Per un'introduzione di base ai concetti e alla terminologia di Docker, consulta la nostra Guida introduttiva a Docker.
Vantaggi di Docker
-
Riproducibilità :Simile a un'applicazione Java, che verrà eseguita esattamente allo stesso modo su qualsiasi dispositivo in grado di eseguire una Java Virtual Machine, un container Docker è garantito identico su qualsiasi sistema in grado di eseguire Docker. Le specifiche esatte di un container sono memorizzate in un Dockerfile. Distribuendo questo file tra i membri del team, un'organizzazione può garantire che tutte le immagini create dallo stesso Dockerfile funzioneranno in modo identico. Inoltre, avere un ambiente costante e ben documentato rende più facile tenere traccia della tua applicazione e identificare i problemi.
-
Isolamento :le dipendenze o le impostazioni all'interno di un container non influiranno su alcuna installazione o configurazione sul tuo computer o su qualsiasi altro container che potrebbe essere in esecuzione. Utilizzando contenitori separati per ogni componente di un'applicazione (ad esempio un server Web, un front-end e un database per l'hosting di un sito Web), è possibile evitare dipendenze in conflitto. Puoi anche avere più progetti su un singolo server senza preoccuparti di creare conflitti sul tuo sistema.
-
Sicurezza :Con importanti avvertenze (discusse di seguito), separare i diversi componenti di una grande applicazione in diversi contenitori può avere vantaggi in termini di sicurezza:se un contenitore viene compromesso, gli altri rimangono inalterati.
-
Hub Docker :per casi d'uso comuni o semplici, come uno stack LAMP, la possibilità di salvare le immagini e inviarle a Docker Hub significa che sono già disponibili molte immagini ben mantenute. Essere in grado di estrarre rapidamente un'immagine predefinita o creare da un Dockerfile mantenuto ufficialmente può rendere questo tipo di processo di installazione estremamente semplice e veloce.
-
Gestione ambientale :Docker semplifica la manutenzione di diverse versioni, ad esempio, di un sito Web utilizzando nginx. Puoi avere un container separato per test, sviluppo e produzione sullo stesso Linode e distribuirlo facilmente in ciascuno di essi.
-
Integrazione continua :Docker funziona bene come parte di pipeline di integrazione continua con strumenti come Travis, Jenkins e Wercker. Ogni volta che il codice sorgente viene aggiornato, questi strumenti possono salvare la nuova versione come immagine Docker, contrassegnarla con un numero di versione e inviarla a Docker Hub, quindi distribuirla alla produzione.
Quando utilizzare Docker
Se la tua applicazione rientra in una o più delle seguenti categorie, Docker potrebbe essere adatto:
-
Apprendimento di nuove tecnologie :per iniziare con un nuovo strumento senza perdere tempo nell'installazione e nella configurazione, Docker offre un ambiente isolato e usa e getta. Molti progetti mantengono le immagini Docker con le loro applicazioni già installate e configurate. Ad esempio, se vuoi provare un sistema di tracciamento distribuito comeZipkin, puoi avere una configurazione funzionante su localhost semplicemente eseguendo:
sudo docker run -d -p 9411:9411 openzipkin/zipkin
-
Casi d'uso di base :Anche l'estrazione di immagini da Docker Hub è una buona soluzione se l'applicazione è sufficientemente semplice o standard per funzionare con un'immagine Docker predefinita. Casi come l'hosting di un sito Web utilizzando uno stack LAMP, l'utilizzo di un proxy inverso o la configurazione di un server Minecraft hanno spesso un'immagine ufficiale o ben supportata disponibile su DockerHub. Se la configurazione predefinita in queste immagini è accettabile per le tue esigenze, l'estrazione dell'immagine può far risparmiare molto tempo che altrimenti verrebbe speso per configurare l'ambiente e installare gli strumenti necessari.
-
Isolamento app :se desideri eseguire più applicazioni su un server, mantenere i componenti di ciascuna applicazione in contenitori separati eviterà problemi con la gestione delle dipendenze.
-
Team di sviluppatori :se hai sviluppatori che lavorano con configurazioni diverse, Docker offre un modo conveniente per avere ambienti di sviluppo locali che corrispondano strettamente all'ambiente di produzione, senza bisogno di ssh in una scatola remota.
Quando non utilizzare Docker
Ci sono anche momenti in cui Docker non è la soluzione migliore. Ecco alcuni esempi:
-
La tua app è complicata e non sei/non hai un amministratore di sistema. Per applicazioni di grandi dimensioni o complicate, l'utilizzo di un Dockerfile predefinito o il pull di un'immagine esistente non sarà sufficiente. La creazione, la modifica e la gestione della comunicazione tra più contenitori su più server è un'attività che richiede tempo.
-
Le prestazioni sono fondamentali per la tua applicazione. Docker brilla rispetto alle macchine virtuali in termini di prestazioni perché i container condividono il kernel host e non emulano un sistema operativo completo. Tuttavia, Docker impone costi di prestazione. I processi in esecuzione all'interno di un container non saranno veloci come quelli eseguiti sul sistema operativo nativo. Se hai bisogno di ottenere le migliori prestazioni possibili dal tuo server, potresti voler evitare Docker.
-
Non vuoi problemi con l'upgrade. Docker è una nuova tecnologia ancora in fase di sviluppo. Per ottenere nuove funzionalità dovrai probabilmente aggiornare le versioni di frequente e la compatibilità con le versioni precedenti non è garantita.
-
La sicurezza è fondamentale per la tua applicazione. Come accennato in precedenza, mantenere i diversi componenti di un'applicazione in contenitori separati offre alcuni vantaggi in termini di sicurezza, poiché un compromesso in un contenitore non può influire facilmente sul resto del sistema. Tuttavia, l'approccio alla containerizzazione di Docker pone le proprie sfide alla sicurezza, soprattutto per le applicazioni più complicate. Questi problemi sono risolvibili, ma richiedono l'attenzione di un ingegnere della sicurezza esperto. (Vedi la sezione Ulteriori informazioni per i collegamenti alle discussioni su questi problemi).
-
Più sistemi operativi. Poiché i container Docker condividono il sistema operativo del computer host, se desideri eseguire o testare la stessa applicazione su sistemi operativi diversi, dovrai utilizzare macchine virtuali invece di Docker.
-
Cluster. I container Docker su server separati possono essere combinati per formare un cluster con Docker Swarm. Tuttavia, Docker non sostituisce strumenti di provisioning o automazione come Ansible, SaltStack e Chef. Inoltre, Docker ha recentemente annunciato il supporto per Kubernetes, suggerendo che Docker Swarm potrebbe non essere sufficiente come gestore cluster autonomo.
Dovresti usare i Docker Containers?
Docker è diventato un modo estremamente popolare per configurare, salvare e condividere ambienti server utilizzando i container. Per questo motivo, l'installazione di un'applicazione o anche di uno stack di grandi dimensioni può spesso essere semplice come eseguire docker pull
o docker run
. La separazione delle funzioni dell'applicazione in contenitori diversi offre anche vantaggi nella gestione della sicurezza e delle dipendenze.
Tuttavia, Docker non sostituisce l'ingegneria dei sistemi o la gestione della configurazione e il suo approccio presenta degli svantaggi. Gli sviluppatori dovrebbero resistere alla tentazione di containerizzare ogni applicazione che creano, semplicemente perché Docker è una soluzione popolare e facile da usare. Come con qualsiasi strumento, i requisiti di qualsiasi progetto dovrebbero essere ricercati attentamente prima di decidere se utilizzare Docker.
Maggiori informazioni
Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.
- Docker
- Hub Docker
- Quando non utilizzare Docker
- 5 problemi di sicurezza durante l'utilizzo di Docker
- 8 regole di sicurezza Docker da rispettare
- Il tuo software è più sicuro nei contenitori Docker