Multipass run, virtualizzazione facile e flessibile

Parole
Marco Bellomo
Immagini
Francesca Uguzzoni
Tempo di lettura
5

Come creare una macchina virtuale ubuntu di facile gestione tramite Shell

N

Cos’è la containerizzazione?

La containerizzazione è una tecnologia di virtualizzazione leggera che consente di eseguire e isolare le applicazioni e i processi, in ambienti virtuali autonomi chiamati "container". Un container rappresenta un ambiente di esecuzione isolato, contenente l'applicazione, le librerie e le risorse necessarie per il suo funzionamento. Ciò consente di eseguire applicazioni in modo efficiente e affidabile su diverse piattaforme, senza dover preoccuparsi delle differenze nell'ambiente di esecuzione sottostante.

In altre parole: la containerizzazione permette di confezionare un'applicazione insieme a tutte le sue dipendenze in un pacchetto singolo, chiamato container, che può essere eseguito su qualsiasi sistema operativo o infrastruttura, che supporti la tecnologia di containerizzazione utilizzata (ad esempio, Docker o Kubernetes).

Le principali caratteristiche della containerizzazione includono:

  1. Isolamento: ogni container è isolato dagli altri, il che significa che le applicazioni contenute in esso possono eseguire senza interferire con altre applicazioni o risorse sul sistema host.
  2. Portabilità: i container sono indipendenti dal sistema operativo e dall'infrastruttura sottostante, quindi possono essere facilmente spostati e distribuiti su diverse piattaforme, senza dover modificare il codice dell'applicazione.
  3. Rapido avvio e arresto: i container possono essere avviati e arrestati molto rapidamente, permettendo una scalabilità rapida ed efficiente delle applicazioni.
  4. Riduzione delle risorse: poiché i container condividono il kernel del sistema host, richiedono meno risorse rispetto alle tradizionali macchine virtuali, dove è necessario eseguire un sistema operativo completo per ciascuna istanza.
  5. Versionamento e gestione semplificata: la containerizzazione consente di gestire e versionare le applicazioni in modo più semplice, garantendo coerenza tra ambienti di sviluppo, test e produzione.

La containerizzazione è estremamente popolare per lo sviluppo di applicazioni, soprattutto nel contesto di architetture a microservizi, poiché semplifica il processo di sviluppo, distribuzione e gestione delle applicazioni, consentendo di ottenere un'infrastruttura più flessibile, scalabile e resiliente.

 

Cos’è la virtualizzazione?

La virtualizzazione è una tecnologia che consente di creare e gestire ambienti di esecuzione virtuali, noti come "macchine virtuali" (VM), all'interno di un unico sistema fisico detto "host". Ogni macchina virtuale funge da un computer autonomo con il proprio sistema operativo, risorse hardware e applicazioni, ma condivide le risorse fisiche dell'host con altre macchine virtuali.

In altre parole, la virtualizzazione permette di eseguire più sistemi operativi e le loro applicazioni in modo simultaneo sullo stesso hardware fisico, creando un ambiente isolato per ciascuna macchina virtuale. Questo approccio consente di sfruttare al massimo le risorse hardware, ottimizzando l'utilizzo della CPU, della memoria e dello spazio su disco.

Le principali caratteristiche della virtualizzazione includono:

  1. Isolamento: ogni macchina virtuale è completamente isolata dalle altre, il che significa che le modifiche o i problemi su una VM non influiscono sulle altre.
  2. Compatibilità multi-piattaforma: le macchine virtuali possono essere eseguite su diversi sistemi operativi e hardware, rendendo più facile il porting delle applicazioni tra ambienti diversi.
  3. Snapshot e clonazione: la possibilità di creare snapshot e clonare macchine virtuali consente di creare copie esatte di ambienti per scopi di backup, test o distribuzione.
  4. Gestione centralizzata: le piattaforme di virtualizzazione offrono strumenti per la gestione centralizzata delle macchine virtuali, semplificando l'orchestrazione e il controllo delle risorse.
  5. Migrazione e bilanciamento del carico: Le VM possono essere facilmente spostate tra diversi host fisici per ridistribuire il carico o per operazioni di manutenzione, garantendo continuità di servizio.

La virtualizzazione è ampiamente utilizzata in diversi contesti, come lo sviluppo di software, la gestione di server, l'ambito aziendale e il cloud computing. Le piattaforme di virtualizzazione più note includono VMware, Microsoft Hyper-V e KVM (Kernel-based Virtual Machine) per ambienti Linux. Questa tecnologia è stata un importante passo avanti nella semplificazione della gestione delle risorse informatiche e ha contribuito a ridurre i costi e migliorare l'efficienza delle infrastrutture IT.

Cosa succede oggi nella realtà?

Nel panorama attuale è abbastanza comune avere macchine virtualizzate (VM) su cui vengono poi usati dei container, in un sistema di “scatole” su “scatole” , che permette di avere sistemi sempre più flessibili e resistenti. Una volta che si ha una VM (virtual machine) si ha in pratica un approccio operativo, molto simile a quello di avere una macchina fisica. Si possono ovviamente avere degli snapshot e una rapido accesso al restore dei backup, però il plus di tecnologie come docker, che permettono isolamento e maggiore velocità nelle operazioni di rilascio di cambiamenti al codice anche molto consistenti, non ha pari. 

Un caso reale

Nel lavoro di tutti i giorni, mi trovo ad utilizzare sul mio Mac Docker Desktop un'applicazione sviluppata da Docker, Inc. che offre una buona esperienza di sviluppo, con molti strumenti per gestire i container Docker, su sistemi operativi Windows e macOS. Progettata per semplificare il processo di creazione, gestione e distribuzione di container Docker su desktop locali, rendendo la containerizzazione accessibile e facile a qualunque elemento del team, qualsiasi sia la sua formazione. Questa soluzione, solitamente molto valida, ha mostrato un po’ di pecche su un paio di progetti al limite, costringendomi a trovare un’altra soluzione. È lì che mi sono interessato a Multipass Run.

Il vantaggio di Multipass.run

Con multipass.run ho potuto crearmi in maniera asciutta e senza fronzoli, tramite shell, una VM Ubuntu in maniera molto veloce. Questa Virtual machine ha il vantaggio di essere una “vera” macchina ubuntu, che replica molto più fedelmente quello che poi mi ritrovo spesso in produzione, ovvero una docherizzazione su macchine virtuali. 

Facciamo un mini progetto assieme!

Andiamo su sito https://multipass.run/ e iniziamo a spulciare un po’ di documentazione.

Scopriamo inanzitutto come installare multipass.run sullla nostra macchina

Se abbiamo MacOs, ci basterà usare il gestore di pacchetti Brew. Non avendo testato su Windows, riporto solo la soluzione sperimentata su mac, lasciando agli utenti di windows testare in autonomia l’ottima documentazione.

brew install --cask multipass

Potremmo aver bisogno di usare una VM abbastanza corposa, quindi meglio saper usare da subito il comando di creazione della macchina, che ci permette di specificare cpu, ram e dimensione hd.

multipass launch --cpus 2 --disk 10G --memory 2G

Otterremo quindi il nome della nostra macchina, nel mio caso: discerning-goldfinch

Entriamo nella nostra VM

multipass shell discerning-goldfinch

usiamo 

sudo su 

per diventare utente con accessi di amministratore, ed installiamo docker e docker compose 

# Install Docker

apt-get -y update

apt-get -y install ca-certificates curl gnupg lsb-release

mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get -y update

apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose

#install docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

#install doacker 

sudo curl -L https://github.com/lotrekagency/doacker/archive/master.tar.gz | tar xvfz - --strip 2 -C /usr/local/bin/

Adesso possiamo copiare il nostro progetto velocemente con il comando multipass transfer, qui per continuare con il nostro esempio, creeremo un banalissimo docker-compose.yml, che ci permetterà ditirare su un’istanza di nginx su porta 80

version: '3'

services:

nginx:

image: nginx:latest

container_name: nginx_container

ports:

- "80:80"


multipass transfer /percorso-completo-del-file/docker-compose.yml discerning-goldfinch:/home/ubuntu

lanciamo quindi 

docker compose up -d

recuperiamo con 

multipass list

l’ip della vm che abbiamo creato, nel mio caso 192.168.64.6

andiamo nel nostro browser, inseriamo l’indirizzo ip della VM, ed ecco rispondere nginx 

In soldoni

Abbiamo appena appena toccato la superficie di multipass.run, uno strumento molto veloce per creare agilissime VM ubuntu, su cui poter testare piuttosto fedelmente e facilmente i nostri progetti. Sicuramente una freccia in più, leggera e flessibile, al nostro Arco.

Analizza la tua presenza online.

Scrivici per una consulenza gratuita



Richiedi consulenza

Marco Bellomo

Chairman

A diciott'anni pensavo che sarei diventato uno scrittore di fama mondiale e che avrei dominato le classifiche con il mio oscuro ciclo fantasy. A ventiquattr'anni pensavo che il PHP fosse immortale. Oggi mi piace non dare nulla per scontato, forse perché ...