Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Een introductie tot Docker

Een introductie tot Docker

This presentation is in Dutch.

Presentatie over Docker voor Code by the Sea.

Peter Verhage

April 21, 2015
Tweet

More Decks by Peter Verhage

Other Decks in Technology

Transcript

  1. Inhoud • Introductie • Wat is Docker? • Waarom Docker?

    • Docker installeren • Docker in de praktijk • Ervaringen / aanbevelingen 2
  2. Introductie • Co-founder en CTO Egeniq • Egeniq bouwt smart

    apps for smart devices • Egeniq concentreert zich op de techniek / bouw • Client-side (iOS, Android, Windows, Web) • Server-side (Ruby, PHP, NodeJS) 4
  3. Introductie • Projecten voor klanten:
 RTL Nieuws, SBS, Pathé Thuis,

    … • Producten:
 Buildozer, … • Buildozer; continuous integration en distributie van mobiele apps (iOS / Android) • Recent voor 90% gemigreerd naar Docker 5
  4. Wat is Docker? “Een open platform voor developers 
 en

    sysadmins voor het bouwen, opleveren en draaien van gedistribueerde applicaties.” 7
  5. Wat is Docker? 12 Container VM Containers zijn geïsoleerd, maar

    delen OS en, waar logisch, bins/libraries
  6. Wat is Docker? Docker deelt de kernel met de host

    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.
  7. Wat is Docker? • Union File System • Bestaat uit

    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
  8. Wat is Docker? • Open source, > 1000 contributors •

    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
  9. Waarom Docker? Waarom belangrijk voor developers:
 Build once, (finally) run

    anywhere*
 17 * Met "anywhere" wordt in dit geval een x86 server met een moderne Linux kernel bedoeld.
  10. Waarom Docker? • Een schone, veilige, portable runtime omgeving voor

    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
  11. Waarom Docker? • Maakt de volledige lifecycle efficiënter, consistenter en

    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
  12. Docker installeren • Docker installeren: • Systeemeisen: Linux, 64-bit, ~

    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
  13. Docker installeren • Kitematic • Momenteel alleen voor OS X

    • Binnenkort ook voor Windows • Eenvoudig te gebruiken UI • Gebruikt Virtualbox shared folders voor host volumes (traag) 23
  14. Docker installeren • Eigen VM / Vagrant: • DIY (do

    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
  15. Docker in de praktijk • Belangrijke commando’s om te onthouden:

    • Draaien van een container:
 docker run -i -t <container> [<command>] • Weergeven containers:
 docker ps • Tonen logs van (een) container(s):
 docker logs [<container>] • Start / stop / attach:
 docker [start|stop|attach] [<container>] • Help :)
 docker help 28
  16. Docker in de praktijk • Zelf images maken • Commit

    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
  17. Docker in de praktijk • Data volumes • Speciaal toegewezen

    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
  18. Docker in de praktijk • Data volumes • Data volume

    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
  19. Docker in de praktijk • Linken van containers • Containers

    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
  20. Docker in de praktijk • Linken van containers • Containers

    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
  21. Docker in de praktijk • Docker compose • Docker filosofie:

    éé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
  22. Ervaringen / aanbevelingen • Gebruik Vagrant of eigen VM indien

    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