Vagrant vs Docker: quale è giusto per te? (Potrebbero essere entrambi)
Pubblicato: 2023-01-26I team DevOps sono sottoposti a crescenti pressioni per fornire rapidamente maggiori funzionalità ai clienti. I fornitori di servizi cloud offrono una soluzione attraverso piattaforme scalabili con eccellenti integrazioni CLI e API. Sfortunatamente, le interfacce esposte dai fornitori di servizi cloud possono essere incompatibili. Tuttavia, alcuni strumenti nativi del cloud aiutano i team DevOps a creare soluzioni personalizzate per qualsiasi provider di servizi cloud.
Due di questi strumenti sono Vagrant e Docker. Capire cosa fanno e come lavorano insieme è la chiave per ottenere il massimo dal tuo ambiente cloud.
Vagrant è uno strumento per la creazione e la gestione di ambienti di macchine virtuali (VM) in un unico flusso di lavoro. Sia che tu stia costruendo macchine virtuali locali da eseguire con hypervisor o solo macchine virtuali cloud, Vagrant fornisce un formato di configurazione coerente, un'unica CLI e provisioner condivisi per installare il software e modificare le configurazioni.
Docker offre la possibilità di impacchettare il software e la configurazione di supporto in immagini che vengono eseguite in modo coerente su più piattaforme. Docker consente ai team DevOps di avere la certezza che il software verrà eseguito su una workstation locale più o meno allo stesso modo in cui viene eseguito su una piattaforma cloud gestita.
Sebbene Vagrant e Docker condividano l'obiettivo di creare ambienti ripetibili, lo fanno in modi diversi ma complementari. Questo articolo esplora come Vagrant e Docker raggiungono i loro obiettivi.
Cos'è Docker?
Docker è una piattaforma aperta per lo sviluppo, la spedizione e l'esecuzione di applicazioni. Consente ai team DevOps di impacchettare software personalizzato, applicazioni di supporto e librerie, nonché istruzioni per la configurazione, il networking, il montaggio di file, i controlli di integrità e avviare script in un artefatto autonomo chiamato immagine.
Le immagini vengono quindi eseguite in un ambiente leggero e isolato chiamato contenitore. A differenza delle VM, che in genere riservano quantità fisse di memoria e limitano rigorosamente l'utilizzo della CPU, i container sono molto più elastici e consumano solo la memoria e la CPU di cui hanno bisogno.
Ciò consente a molti container di funzionare fianco a fianco in modo efficiente, riducendo i costi e aumentando la scala. Tuttavia, i contenitori non sono considerati sicuri come le macchine virtuali, il che significa che i contenitori non sono una soluzione ideale per l'esecuzione di codice non attendibile.
Perché utilizzare Docker (rispetto a Vagrant)?
I team DevOps in genere utilizzano Docker per distribuire ed eseguire applicazioni Web, incluse applicazioni cloud-native che si integrano con le code di messaggi o sono ospitate su piattaforme Function-as-a-Service (FaaS) che rispondono a trigger ed eventi basati su cloud.
Piattaforme come Kubernetes si basano su Docker, consentendo l'orchestrazione dei container su larga scala. Inoltre, ogni fornitore di servizi cloud supporta la possibilità di eseguire container Docker nelle proprie offerte di piattaforma distribuita come servizio (PaaS). Ora è raro trovare un PaaS che non supporti Docker.
Docker può anche distribuire ed eseguire strumenti basati su CLI, con tutti i più diffusi strumenti cloud-native che offrono immagini Docker che incorporano la loro CLI.
Quali sono i vantaggi di Docker?
Docker risolve un problema comune affrontato dai tradizionali processi di distribuzione del software, in cui le applicazioni personalizzate potrebbero mostrare risultati diversi se eseguite sulla workstation locale di uno sviluppatore e in un ambiente di produzione. Queste differenze sono spesso il risultato di sviluppatori che eseguono versioni diverse di linguaggi di programmazione, hanno configurazioni diverse per supportare applicazioni come i server Web o eseguono sistemi operativi completamente diversi rispetto all'ambiente di produzione. Queste differenze portano a problemi di supporto che rimbalzano avanti e indietro tra i team con commenti come "Funziona sulla mia macchina".
Poiché le immagini Docker includono il codice per le applicazioni personalizzate, tutte le applicazioni di supporto e le librerie, le immagini vengono eseguite in contenitori che forniscono risultati più coerenti indipendentemente da dove vengono eseguite.
Le immagini Docker sono facili da distribuire utilizzando registri come Docker Hub, consentendo ai team DevOps di condividere rapidamente le immagini tra loro e distribuire le immagini utilizzando le varie piattaforme di hosting. Ad esempio, troverai Docker dietro la suite di sviluppo DevKinsta WordPress di Kinsta.
Laddove sono richiesti stack di applicazioni più complessi, come la distribuzione di un database insieme a un'applicazione back-end o una raccolta di microservizi correlati, Docker Compose offre la possibilità di creare e collegare più container Docker con un singolo comando. Tutti i contenitori, le impostazioni associate e le configurazioni di rete sono definiti in un singolo file YAML. Docker Compose legge quindi questo file per creare e gestire più contenitori come una singola unità.
Docker gode inoltre di un supporto quasi universale tra i principali fornitori di cloud, il che significa che i team DevOps hanno l'imbarazzo della scelta quando eseguono le loro immagini Docker nel cloud.
Cos'è il vagabondo?
Per decenni, le macchine virtuali si sono dimostrate una soluzione affidabile e sicura per il partizionamento e il provisioning delle risorse di elaborazione. Le macchine virtuali rimangono i servizi più popolari esposti dai fornitori di servizi cloud e molte soluzioni commerciali e open source per i team stanno cercando di eseguire le macchine virtuali in locale.
Tuttavia, questa varietà rappresenta una sfida per i team DevOps. Ogni soluzione espone una CLI e un'API diverse per creare e gestire le macchine virtuali, rendendo difficile mantenere la coerenza tra gli ambienti di sviluppo locali e le piattaforme basate su cloud.
Vagrant offre una soluzione astraendo le differenze sottostanti tra le piattaforme VM, consentendo ai team DevOps di eseguire il provisioning di nuove VM con un'unica CLI e una sintassi di configurazione coerente. I team che adottano Vagrant possono creare macchine virtuali coerenti indipendentemente dal fatto che vengano eseguite in locale o in un ambiente cloud e possono passare facilmente da un ambiente all'altro. Vagrant ha una moltitudine di usi diversi, incluso come sostituto di MAMP (macOS, Apache, MySQL/MariaDB e PHP, Perl o Python).
Perché usare Vagrant (rispetto a Docker)?
È possibile avviare una VM e configurare manualmente il sistema operativo installando manualmente il software e modificando i file di configurazione. Questo non è l'ideale, poiché il processo non è ripetibile, il che significa che le VM devono essere ricreate manualmente per diversi sistemi operativi e provider. Inoltre, rende quasi impossibile capire come è stata configurata una VM in un secondo momento.
Una pratica migliore consiste nell'automatizzare il processo necessario per configurare una macchina virtuale. Vagrant fornisce un unico strumento per automatizzare il processo di costruzione di macchine virtuali per molti provider. Vagrant fornisce anche un'ampia selezione di VM di alta qualità su Vagrant Cloud che i team DevOps possono utilizzare per avviare le proprie VM.
Quali sono i vantaggi di Vagrant?
I team DevOps che utilizzano Vagrant dispongono di un unico strumento per apprendere, indipendentemente dal fatto che stiano creando macchine virtuali per piattaforme locali, piattaforme cloud o entrambe. Puoi facilmente modificare i file di configurazione di Vagrant e rieseguirli o rivederli in un secondo momento per capire come è stata costruita una VM.
Vagrant consente inoltre ai team DevOps di migrare al cloud o tra provider senza riprogettare il processo che utilizzano per creare macchine virtuali.
Le macchine virtuali create da Vagrant forniscono un elevato livello di isolamento, spesso sfruttando il supporto di virtualizzazione specializzato integrato nelle moderne CPU. Ciò rende le macchine virtuali e gli strumenti che le creano, come Vagrant, la scelta migliore in cui la sicurezza e l'isolamento sono una priorità assoluta.
Molte distribuzioni Linux, come Ubuntu e Fedora, forniscono anche scatole Vagrant ufficiali su cui i team DevOps possono costruire. Ciò riduce il tempo necessario per creare macchine virtuali personalizzate.
Vagrant vs Docker: uno sguardo più da vicino
Sia Vagrant che Docker rendono i team DevOps più efficienti automatizzando la creazione, la distribuzione e l'esecuzione delle applicazioni software.
Docker raggiunge questo obiettivo con un formato di packaging personalizzato sotto forma di immagini e un ambiente di esecuzione leggero tramite container. I container vengono eseguiti in modo coerente tra le piattaforme, offrendo ai team DevOps maggiore sicurezza che il loro software funzioni come previsto. Docker è ben supportato dalle piattaforme cloud PaaS e FaaS, consentendo ai team DevOps di scegliere la piattaforma migliore per le loro esigenze.
Molti container possono coesistere su un singolo host, principalmente, ma non completamente, isolati l'uno dall'altro pur condividendo lo stesso pool di risorse. Ciò consente ai contenitori di ridimensionarsi in modo efficiente.
Vagrant raggiunge questo obiettivo fornendo un metodo coerente per la costruzione di VM con provider esistenti. È la scelta ideale per i team che hanno già investito nelle macchine virtuali, basandosi sul loro elevato livello di isolamento, sicurezza, controllo e personalizzazione.
Docker fornisce inoltre la soluzione migliore per l'esecuzione di codice attendibile, riducendo al minimo i costi di elaborazione. I contenitori sono ragionevolmente isolati l'uno dall'altro ma comportano un sovraccarico minimo. Ciò significa che molti container possono essere eseguiti contemporaneamente su un sistema operativo condiviso. Le macchine virtuali forniscono la soluzione migliore quando i team necessitano di elevati livelli di isolamento e sicurezza o richiedono la possibilità di eseguire molti sistemi operativi diversi fianco a fianco, con Vagrant che fornisce una soluzione conveniente per la creazione di macchine virtuali in modo automatizzato e ripetibile.
Vagrant e Docker non si escludono a vicenda ed entrambi gli strumenti possono essere utilizzati fianco a fianco. Ad esempio, i team DevOps possono utilizzare Docker per sviluppare ed eseguire applicazioni mentre utilizzano Vagrant per ricreare ambienti specializzati per riprodurre i problemi. Docker può anche essere eseguito all'interno di una VM creata da Vagrant, forse per testare nuove versioni di Docker o per testare strumenti distribuiti come immagini Docker in un ambiente isolato.
Riepilogo
I team DevOps hanno molte scelte durante la creazione, la distribuzione e l'esecuzione delle applicazioni.
Docker fornisce un formato di immagine personalizzato e un ambiente di esecuzione del contenitore che consente un utilizzo delle risorse su larga scala ed efficiente ed è supportato su piattaforme PaaS e FaaS.
Le VM offrono ambienti di esecuzione sicuri e isolati da molti provider di VM cloud e on-premise, con Vagrant che astrae molte differenze per fornire un'unica CLI e una sintassi di configurazione coerente per istanziare le VM tra i provider.
Prima di iniziare a sviluppare la vostra prossima app, date un'occhiata a come il servizio di hosting delle applicazioni di Kinsta può sfruttare i Dockerfile per gestire la distribuzione del vostro codice.