en gebruikt Linux namespaces + cgroups (LXC) en union filesystems voor het isoleren van: 13 • process trees (PIDs) • mounts • netwerk • inter-process communicatie • gebruikers • hostnames • geheugen • CPU • Disk toegang • Device toegang Kortom, Docker combineert en standaardiseert op verschillende bestaande Linux componenten.
meerdere lagen • Alle lagen zijn read-only… • … behalve de toplaag • Initieel is de toplaag leeg • Wijzigen bestand? Kopie naar toplaag, origineel niet meer zichtbaar. 14
Geschreven in Go • ~ 2 jaar jong • Gerund door commercieel bedrijf • > $150m funding • Versie 1.0 uitgebracht op 9 juni 2014 • Huidige versie: 1.6.0 • Momenteel Linux only, Windows komt er aan 15
je app. • Geen zorgen over dependencies tijdens opeenvolgende deployments. • Per app verschillende versies libraries etc. • Eenvoudig automatiseren / scripten van testen, integratie en packaging. • Verminder/elimineer zorgen over compatibiliteit op verschillende platformen. • Goedkope, overheadloze containers voor het deployen van services. Een VM zonder de overhead van een VM. • Instant replay en resetten van image snapshots. 18
herhaalbaar. • Verhoogt de kwaliteit van code van ontwikkelaars. • Elimineert inconsistenties tussen omgevingen. • Ondersteunt het scheiden van verantwoordelijkheden. • Verbetert snelheid en betrouwbaarheid van continuous deployment en continuous integration systemen. • Voorkomt belangrijke performance, overhead, deployment en portabiliteit problemen van VMs. 20
kernel 3.10 of nieuwer • Windows: Boot2docker / Vagrant • OS X: Boot2docker / Vagrant / Kitematic • Boot2docker: • One-click installer • Gebruikt een Virtualbox VM • Docker binary op host machine; docker aansturen via de cli • Gebruikt Virtualbox shared folders voor host volumes (traag) 22
it yourself) • Virtualbox (gratis), Parallels (“gratis”) of VMWare (licentie) VM • Docker zelf installeren op host machine • Kan shared folders gebruiken (traag), rsync (snel, maar niet altijd praktisch) of NFS (snel genoeg, beste optie) voor volumes • Tip: gebruik eigen VM /Vagrant alleen als de andere opties niet voldoen 25
container: docker commit <container> <repository> • Of gebruik een Dockerfile • Begin met een basis image • Voer commando’s uit, voeg volumes toe etc. • Genereer image: docker build -t <name> <path> • (Optioneel) push je image naar een repository docker push <name> 29
directory in één of meer containers die het Union File System omzeilt. docker run -v /webapp training/webapp • Kan gemapt worden op een directory (of bestand) van de host. docker run -v $PWD/webapp:/webapp training/webapp 31
containers kunnen gebruikt worden voor delen van data en voor persistentie. docker create -v /data --name data ubuntu /bin/true docker run -d --volumes-from data --name db1 postgres docker run -d --volumes-from data --name db2 postgres 32
hebben eigen netwerk interface en ip • Containers kunnen netwerk poorten beschikbaar maken: docker run -d -P example node server.js docker run -d -p 5000:80 example node server.js • Bind op alle ip adressen host, tenzij gespecificeerd • Poorten zijn op de host beschikbaar, maar niet automatisch in andere containers 34
kunnen aan elkaar gelinkt worden • Belangrijk om containers logische namen te geven: docker run -d --name redis1 redis • Vervolgens kan de link met een alias worden gelegd: docker run -d -P --name web1 --link redis1:redis example node server.js • /etc/hosts en env bevat ip en poort info 35
één proces / taak per container • Containers zijn daarom bijna nooit alleen • Docker compose maakt het heel eenvoudig om containers te configureren en aan elkaar te linken • Vooral handig tijdens ontwikkeling, maar wordt steeds verder ontwikkeld voor productie doeleinden 37
Virtualbox shared folders te traag zijn • Gebruik aufs als storage driver, niet devicemapper • Gebruik dezelfde images voor productie en development • Voor een cluster van machines met Docker; • Docker Swarm • Amazon EC2 Container Service • etc. 40