Docker, una soluzione semplice e geniale

In quest’ultimo anno e mezzo, abbiamo assistito all’eccezionale evoluzione del progetto open-source Docker: una soluzione che permette di automatizzare il deployment di applicazioni all’interno di containers autosufficienti con estrema facilità e velocità.

Docker

Il progetto

è nato dall’esperienza di dotCloud, società specializzata nello sviluppo di soluzioni PaaS, e in particolare dal suo CTO, Solomon Hykes, che è il suo più grande contributore insieme ai più di 600 sviluppatori della open-community.
La prima versione stable è stata rilasciata lo scorso 9 Giugno e accolta con molto favore da tutta la community e molti progetti collegati; mentre a oggi, l’ultima release disponibile, è la 1.3.1. Dunque è comprensibile come la velocità di sviluppo, gli investimenti e l’interesse maturato sul progetto stanno accelerando il rilascio di nuove features e integrazioni.

Come funziona?

Docker, come anticipato, basa la sua semplicissima logica di deploy applicativa a partire dai containers e immagini (“template”).
I containers sono delle porzioni di spazi di sistema nei quali, le applicazioni e le proprie dipendenze, vengono eseguite con risorse (CPU, RAM, block I/O e network) isolate pur mantenendo comune lo stesso kernel space: questa tecnologia è di fatto una virtualizzazione light, in quanto richiede meno overhead rispetto ai classici e famosi hypervisor (questi ultimi infatti eseguono una virtualizzazione complessiva dell’hardware e del sistema operativo).

Come accade nelle navi porta containers, che permettono lo spostamento di qualsiasi merce da un luogo a un altro, così Docker permette lo spostamento di applicazioni mediante il deploy di istanze di “immagini” che contengono:

  • una immagine base (disponibili per le più importanti distro: rhel, centos, debian, ubuntu…)
  • la/le applicazione/i (dunque una serie di processi)
  • i requirement dell’environment a corollario dell’applicativo (mount, network port, etc…)

tutto questo è descrivibile e “buildabile” automaticamente a partire da un file detto Dockerfile.

A questo si aggiunge anche la possibilità di poter committare e versionare i vostri container, proprio come fareste con i vostri files, per poter creare nuove immagini da poter implementare in locale o su altre macchine remote, pushando l’immagine in un repository remoto detto registry (una classica operazione fatta con SVN o GIT).

Questo rende dunque la vostra applicazione “dockerizzata”, e tutte le sue dipendenze, usabili e trasportabili su qualsiasi altra macchina che esegue il demone Docker.

Esiste un repository comune, offerto dal sito del progetto Docker, chiamato Registry Hub e che potrete sfogliare all’indirizzo https://registry.hub.docker.com – qui gli utenti hanno rilasciato migliaia di immagini preconfezionate per le più svariate applicazioni. Ogni immagine è accompagnata da una breve descrizione e repository git ove è possibile sfogliare il contenuto del Dockerfile che lo ha buildato.

E’ inoltre possibile costruirsi il proprio repository a partire, neanche a dirlo, da una immagine già pronta chiamata “registry” (https://registry.hub.docker.com/_/registry/): questa una volta avviata ed esposta dietro un web server NGINX o Apache, sarà un perfetto repository privato per tutte le vostre applicazioni, pronte per essere deployate in pochissimi minuti.

 

Come iniziare?

Docker può essere eseguito solo con i seguenti prerequisiti:

  • architettura a 64 bit
  • Kernel Linux recente: in particolare è consigliabile (in alcuni casi obbligatorio) utilizzare almeno la versione 3.8 o successive (alcune versioni 2.6.x sono state appositamente patchate)
  • il kernel deve supportare uno dei seguenti storage driver:
    • Device Mapper (default)
    • AUFS (molto utilizzato nelle prime versioni e causa di molte limitazioni)
    • vfs
    • brtfs
  • cgroups and namespaces supportati e abilitati dal kernel

Per il setup del vostro ambiente usate pure la guida adatta a voi (per tutte le piattaforme e distro): https://docs.docker.com/installation/#installation

Una volta installato e avviato il demone docker (infatti l’applicazione è di tipo client/server ed è dunque possibile centralizzare la gestione di diversi host docker da un unico manager mediante la connessione client) basterà lanciare il vostro primo container:

# scaricate l’immagine base di centos 7 nel vostro repo locale
docker pull centos:latest

# avviate il vostro primo docker a partire dall’immagine appena scaricata
docker run -i -t --name extraordy-lab centos /bin/bash

Avrete così avviato il vostro primo container e sarete liberi di personalizzarlo a vostro piacimento e, una volta usciti (il processo verrà fermato), di poterlo poi committare con il comando:

# comando di commit locale:
docker commit extraordy-lab lab:latest

potete verificare la presenza della nuova immagine con il comando “docker images” e dunque creare nuove istanze della vostra lab:latest, o altre, semplicemente sostituendo il nome dell’immagine desiderata alla procedura sopra descritta.

Vi ricordo che, se non commitate, tutte le modifiche all’immagine di avvio verranno distrutte alla distruzione del container.

Tutti i comandi della CLI sono ampiamente documentati a questo indirizzo:
http://docs.docker.com/reference/commandline/cli/

Sono disponibili numerosi esempi di addestramento che spiegano come creare applicazioni Node.js, database MongoDB e PostgreSQL, etc … https://docs.docker.com/installation/#examples

Perché usare Docker?

  • è estremamente utile e versatile nel velocizzare lo sviluppo/test locale e nella condivisione delle Docker images all’interno dei team;
  • supporta pienamente la nuova tendenza di ambienti autonomi composti da micro services;
  • è indicato per l’esecuzione test cases su singole istanze applicative in ambienti di Continuous Integration (CI) come Jenkins (si trovano in rete numerosi tutorial in merito)
  • permette la creazione di ambienti PaaS multi tenant su architetture host condivise, garantendo il massimo isolamento dei processi e dei dati;
  • è un’ottima soluzione per poter testare localmente architetture complesse multi-host

Purtroppo non mi è possible essere sufficientemente breve ed esaustivo nel trattare gli aspetti tecnici e le potenzialità di Docker, ma sono sicuro di aver attirato la vostra attenzione che, nelle prossime settimane, stimoleremo con ulteriori casi d’uso concreti.

A presto…

Ti piacerebbe diventare anche tu uno di noi e pubblicare i tuoi articoli nel blog degli RHCE italiani?

Panoramica privacy
EXTRAORDY | Your Red Hat Trusted Mentor

Questo sito utilizza i cookie in modo da offrirti la migliore esperienza utente possibile. Le informazioni sui cookie sono memorizzate nel tuo browser e svolgono funzioni come riconoscerti quando ritorni sul nostro sito e aiutare il nostro team a capire quali sezioni del sito ritieni più interessanti e utili.

Pertanto per una completa fruizione del presente sito, si consiglia di configurare il browser in modo che accetti la ricezione dei cookie.

Cookie strettamente necessari

I cookie strettamente necessari dovrebbero essere abilitati in ogni momento in modo che possiamo salvare le tue preferenze per offrirti la miglior esperienza possibile sul nostro sito.

 

Se disabiliti questo cookie, non saremo in grado di salvare le tue preferenze. Ciò significa che ogni volta che visiti questo sito web dovrai abilitare o disabilitare nuovamente i cookie.

Cookie di terze parti

Questo sito utilizza Google Analytics per raccogliere informazioni anonime quali il numero di visitatori del sito e le pagine più popolari.

Mantenere abilitato questo cookie ci aiuta a migliorare il nostro sito.