Docker orchestration reloaded

24 marzo 2015

Fabrizio Soppelsa

- RHCE, Autore di Linux&C, Autore di Linux Journal

docker-whales-transparent

È passata un po’ di acqua sotto i ponti da quando abbiamo sperimentato Docker nei post precedenti, e ora con la release 1.5 sono stati aperti nuovi cantieri.

Quando i requisiti superano i deployment semplici e bisogna scalare verso architetture più complesse, ecco che i tool standard messi a disposizione da Docker non bastano più. Per fornire un’interfaccia standard con un alto livello di astrazione superiore, il team ha dato il via a tre progetti interni, ora in stage beta, che costituiscono la Docker orchestration suite.

Il primo tool, chiamato Machine, è un comando portabile e universale per fare setup di host Docker (inclusa l’engine). Una specie di zero-to-Docker per trasformare un server fisico o virtuale in una VM pronta ad ospitare container Docker. Sono già stati rilasciati 12 driver, inclusi Amazon EC2, Google Cloud Platform e OpenStack. Si scarica il binario per la piattaforma adatta, pronti via…

# docker-machine create

Prendiamo un amministratore OpenStack. Con Machine può fare provisioning automatico di un Docker host con un comando. Cioè non gli serve più creare una VM, entrare, aggiungere repository, configurare il software, installare i pacchetti, per non parlare degli aggiornamenti dell’engine. Tutto inglobato in un comando. Per esempio:

# . openrc
# docker-machine create --driver openstack --openstack-flavor-name m1.small --openstack-image-name centos7 --openstack-net-name net04 mydockerhost

Dopo aver caricato le variabili d’ambiente per le credenziali OpenStack, viene creata un’istanza denominata mydockerhost con flavor small, immagine di partenza centos7, rete net04, accessibile via SSH secondo le configurazioni del cluster.

Il secondo tool è Swarm. Swarm fornisce capacità native di clustering a Docker, estendendo l’engine stessa. Con Swarm, l’utente può gestire un pool di container (nodi), lasciando a Swarm il compito di gestirne la salute, i workload e usare il failover: Se un nodo va giù, Swarm può automaticamente ribilanciare il cluster spostando e reinizializzando i container opportuni. L’esperienza utente con Swarm diventa uniforme per ogni dimensione del cluster Docker: l’utente si interfaccia non più ai container, ma allo Swarm server, che agisce come un gateway centralizzato. I nodi eseguono un agent, che prende comandi dal server. L’utente può eseguire un comando sul cluster interagendo con lo Swarm server, invece che con ogni container. Swarm nasce per soddisfare le esigenze di ambienti di produzione medio-grandi e viene distribuito, naturalmente, sottoforma di immagine Docker. Così, è sufficiente eseguirla su un Docker host:

# docker pull swarm
# docker run --rm swarm create

Il terzo tool, Compose, ci è familiare perché prima era sviluppato da Orchard e si chiamava fig. Con Compose, si possono costruire container a partire da un file YAML dichiarativo. Questo file è una sorta di Dockerfile aumentato, che può specificare immagine di partenza, volumi da montare, porte da esporre e container da collegare tra loro. Con Compose si può progettare e creare un ambiente complesso fatto di diversi container con un solo comando. Diamo un’occhiata al seguente file YAML:

web:
 image: example/www 
 command: /usr/sbin/httpd -DFOREGROUND
links:
 - db
 volumes:
 - /var/www/html1:/var/www/html
db:
 image: example/mysql
 command: /usr/bin/mysqld_safe --bind-address=0.0.0.0

Questo file definisce la struttura di due container, uno con un web server e uno con un database server. Il container web si collega (link) con il container db attraverso le capacità native di Docker, monta un volume dell’host (/var/www/html1) dentro il container (/var/www/html), esegue Apache. il container db esegue MySQL. Ed ecco che la struttura si può mettere in piedi con questo comando:

# docker -compose up

La cosa più interessante di Compose è che può scalare automaticamente a qualsiasi numero di container. Per esempio, creiamo tre container web e due db:

# docker-compose scale web=2 db=3

Conclusioni

Ricapitolando. Un tool per creare e gestire i Docker host. Uno per centralizzare, monitorare e garantire l’HA di cluster di container. Uno per progettare applicazioni ad alto livello. Tutto questo si chiama orchestrazione: le tre nuovissime frecce nell’arco di Docker.