Di recente abbiamo approfondito il tema “Container per IoT. I vantaggi di BalenaOS“. Oggi torniamo a parlare di container, spiegando perché da quando abbiamo scoperto Docker non riusciamo più a farne a meno.
Prima dei container Docker…
Da sviluppatori quali siamo, nella distribuzione dei nostri software abbiamo sempre avuto come obiettivo l’individuare un sistema robusto che garantisse l’isolamento della nostra applicazione e ci potesse risparmiare sorprese nella messa in produzione.
Al giorno d’oggi la scelta probabilmente sarebbe ovvia: soluzioni come Docker per la containerizzazione delle proprie app sono diventati un must per le software house che usano strumenti moderni. E probabilmente lo erano anche nel 2018 quando abbiamo scoperto Docker… ahimè in ritardo.
Ma come ci comportavamo prima di adottare i container Docker? La nostra avventura in strumenti “alternativi” di distribuzione nasce ancor prima del 2018: era molto comune installare un server fisico o macchina virtuale, seguendo poi una configurazione opportuna per infine procedere con l’installazione del proprio software.
Pur essendo una scelta molto praticata, questo processo non ci convinceva a causa di indubbi svantaggi:
- Ogni installazione rischiava di avere vita propria. Inoltre le variabili che differenziavano le varie installazioni erano multiple, partendo dal sistema operativo, passando per i suoi aggiornamenti, le configurazioni successive fatte da noi o dal cliente, le versioni di SDK…;
- Ogni installazioni richiedeva tanto tempo, anche quando c’erano in gioco le migliori automazioni;
- Non sempre si poteva avere presso il cliente un server fisico o virtuale dedicato (o pulito), per cui spesso bisognava condividere spazi e risorse;
- Diventava fortemente consigliato documentare ogni installazione e mantenere tale documentazione aggiornata negli anni;
- In fase di rilascio spesso emergevano bugs o problemi non rilevati nell’ambiente di sviluppo.
… c’erano i sistemi homemade
La risposta a queste problematiche era data, laddove possibile, da sistemi fatti in casa che offrissero una portabilità efficiente e automatizzata del software dall’ambiente di sviluppo a quello di produzione.
Abbiamo sviluppato software per fare build automatiche, inizialmente partendo da VirtualBox che ci permetteva di creare tramite API una VM pulita, di eseguirla e tramite SSH seguire l’installazione e configurazione completa del nostro software. Al termine dell’operazione veniva generata un’immagine statica che serviva da template per la successiva distribuzione verso i clienti.
Con l’esigenza di lavorare anche con i Raspeberry o sistemi non X86 o X64, abbiamo realizzato un software che sfruttava il sistema debootstrap di Debian per costruire da scratch tutta l’immagine con sistema operativo, librerie e quanto serviva per far girare il nostro applicativo.
Bello, vero? Almeno così sembra! Sì perché sicuramente abbiamo acquisito molto know how, ma col senno di poi la strada si è rivelata non vincente.
La svolta Docker
All’epoca era già sul mercato il sistema di container Docker, e molte delle funzionalità da noi realizzate per fare il build delle immagini le abbiamo trovate qualche anno dopo già incluse in questo strumento. Anche il sistema multi step che avevamo ideato per gestire a livelli le nostre immagini era presente anche in Docker: se da un lato ciò significava che l’approccio era corretto, dall’altro ci faceva capire che avevamo perso del tempo.
Questa esperienza ci ha insegnato tanto. L’aggiornamento e la conoscenza delle nuove tendenze di mercato è di fondamentale importanza, tuttavia spesso siamo talmente concentrati sui nostri progetti e sulla nostra quotidianità al punto da isolarci e perdere opportunità e nuovi stimoli che giungono dall’esterno.
Son già passati oltre 2 anni da quando abbiamo deciso di svoltare verso Docker. E come noi, anche tante altre aziende. Perché i benefici che dà Docker in termini di stabilità, solidità e scalabilità non sono al momento riscontrabili in nessun’altra soluzione. E tutto questo non solo semplifica il lavoro di sviluppo, ma offre al cliente un software dall’infrastruttura molto più flessibile, con un notevole risparmio di costi, alti livelli di sicurezza e una maggiore velocità di esecuzione.
Hai bisogno di un’applicazione custom o di un software personalizzato? Contattaci: collaboriamo anche in outsourcing.