Docker 3rd Birthday

DOCKER BIRTHDAY #3 In questi giorni ricorre il terzo compleanno di Docker e si è festeggiato in tutto il mondo! La tecnologia di “virtualizzazione light” che sta riscuotendo sempre più successo in ambito devops è da considerarsi ormai matura a tutti gli effetti essendo arrivata a spegnere 3 candeline sulla torta! Noi di Ibuildings vogliamo festeggiare l’evento ricordando che è da poco stato rilasciato Docker 1.10 che introduce sostanziose novità nella piattaforma. Vediamone assieme alcune tra le più importanti: Compose file È stato aggiunto il pieno supporto per i nuovi sistemi di gestione di network e volume in Docker Compose. Per sfruttare queste nuove feature si è reso necessario creare un nuovo formato per il Compose file chiamato v2 che ci permette di replicare in maniera fedele sulla nostra macchina di sviluppo complesse infrastrutture di deploy composte da combinazioni multiple di network e di volume. È ancora più facile usare la stessa configurazione nell’ambiente di sviluppo e passarla a stage, CI e produzione. Le novità non finiscono qui: sono stati aggiunti inoltre alcuni comandi che permettono il set up dell’ambiente di sviluppo ancora più velocemente: - docker-compose build: permette di fare il build delle immagini presenti nel Dockerfile. - docker-compose pull: permette di eseguire il pull delle immagini presenti nel Dockerfile. - docker-compose events: espone gli eventi provenienti dall’Engine Docker verso le proprie applicazioni permettendo quindi di reagire ad azioni come la creazione o lo stop di un container. - sono stati introdotti i Build arguments: è possibile passare parametri in fase di compilazione al Dockerfile. Networking Nella versione precedente del Docker Engine è stato introdotto un nuovo sistema di networking che permette di costruire complesse topologie di rete adatte alle proprie applicazioni. Oltre al pieno supporto in Docker Compose queste le più importanti novità:​ - links in network: ora è possibile usare lo switch “--link” anche all’interno di network create dall’utente. - container alias in network: è possibile definire alias per ogni container a livello di network oltre che per singolo container. - reti interne: è possibile restringere il traffico entrante ed uscente da una rete attraverso lo switch “--internal”. - indirizzo IP personalizzato: è possibile dare ad un container uno specifico indirizzo IP. - definizione di server DNS: storicamente i container si basano su “/etc/hosts” per risolvere gli indirizzi, ora si può passare l’indirizzo di un server DNS per rendere il sistema più scalabile e dinamico. Docker Engine 1.10 Oltre agli aggiornamenti sicurezza e alle nuove feature del networking ci sono ancora importanti novità che riguardano il Docker Engine: - content addressable image IDs: l’ID delle immagini rispecchia ora il contenuto dell’immagine in una maniera simile a come l’hash di un commit Git rappresenta il contenuto del commit. In questo modo è garantito che il container in esecuzione è quello aspettato anche solo guardando il l’ID dell’immagine. - events stream: il Docker Engine ora mette a disposizione il comando “docker events” e un’API che permette di ottenere gli eventi in maniera strutturata per tipo di risorsa e azione processata per quella stessa risorsa. - pull/push migliorati: i layer sono ora pushati in maniera parallela mentre il pull è stato reso più veloce e stabile. - limite di risorse a run time: attraverso “docker update” ora è possibile modificare i limiti di risorse a runtime senza riavviare il container. - file di configurazione: ora è possibile configurare il daemon attraverso un file di opzioni e aggiornare alcune di tali opzioni a run time senza doverlo riavviare. - filesystem temporanei: attraverso lo switch “--tmpfs” è ora possibile creare filesystem temporanei, utili per le immagini read only. - restrizioni I/O: è ora possibile definire limiti di I/O attraverso switch come “--device-write-bps” o “--device-read-iops”. - corretto ordine di avvio di container: ora è il Docker Engine stesso che si occupa di avviare i container nel giusto ordine. Swarm 1.1 Swarm è il sistema di clustering nativo di Docker. Rende estremamente semplice creare e mantenere un cluster di Engine ed è la base per il sistema di clustering e scheduling Docker Universal Control Plane. Anche in questa release ci sono importanti novità: - rischedulazione di container: quando un nodo cade ora Swarm può essere configurato per far ripartire un container su un nuovo nodo. - migliore manutenzione: quando un nodo è irraggiungibile ora Swarm tenterà di contattarlo più volte al posto di lasciar perdere e lo segnalerà anche in “docker info” per aiutare nel debug. Machine 0.6 Docker Machine è il cuore su cui si basa Docker Toolbox ed in questa versione ci si è concentrati sull’affidabilità quando si usa Virtualbox su sistemi Windows. Ci sono state inoltre queste novità: - valore di “default”: ora non è più necessario specificare “default” in ogni comando perchè sarà aggiunto automaticamente se mancante ad ogni esecuzione. - nuovo comando di provisioning: ora è più semplice eseguire il provisioning di un host quando fallisce oppure quando la sua configurazione è corrotta. Registry 2.3 Il Docker Registry ha ricevuto miglioramenti sia in sicurezza che in performance. Supporta ora un nuovo manifest file inoltre permette la condivisione di livelli tra immagini rendendo molto più veloce il push di immagini con livelli già presenti nel Registry. Questo e tanto altro è quello che al momento ci offre e ci appassiona di Docker e siamo sicuri che la prossima release saprà stupirci con tante altre novità interessanti. Voi cosa vi aspettate dal futuro? Discutiamone assieme nei commenti!