2. • Seniorudvikler / Arkitekt
• Forkærlighed for besværlige backend ting
og QA
• Hovedmand bag vagrantbaseret
udviklings-setup brugt under udvikling af
dr.dk de sidste to år
• Har brugt Docker i et halvt år
• mads@danquah.dk / @danquah
Mads Høgstedt Danquah
3. Reload og Docker
• Vi kører 100% Docker til udvikling (fremadrettet)
• Vi er rigtig glade for det ind til videre
• Det har gjort udvikleroplevelsen markant bedre
• (Vi sidder alle på Mac og Linux)
4. Agendaen
• "Det lokale udviklingsmiljø"
• Hvad er det der Docker
• Hvordan bruger vi Docker i Reload
• Spørgsmål
7. Plain Mac OS X
En mac kommer med
• PHP (i en eller anden version)
• Apache (semi-ny)
• "It just works"(tm)
8. Plain Mac OS X
• ... Ind til det ikke gør
• Det er Apples miljø, ikke dit.
9. • Vi kan selv vælge versioner!
• Vi kan skifte versioner
• Vi kan laver super fede komplicerede
nørdede setups med dnsmasq,
mailcatching, firewall trylleri og the works
Homebrew
10. • Men det fungerer bedst til på én udviklers
maskine
Homebrew
12. • GUI der skjuler kompleksitet ala hvad man
ville lave med Homebrew
• Kan være en ret god løsning
• ... bare husk at opsætningen ikke er ret
gennemsigtig.
MAMP og co
14. • NU kan vi styre det hele - OS, versioner,
konfiguration, etc
• Samme miljø på tværs af alle udviklere
• Kan være tungt at køre mange boxe
• Ligger op til provisionering ved vagrant up
• Provisionering kan være noget langhåret
(dog op til ens devops)
Vagrant
16. Docker - simpelt og
overskueligt
– Sagde ingen udvikler nogensinde
17. Så hvad er docker 1/2
• Docker er en bunke værktøjer og implementationer af specifikationer
(se https://www.opencontainers.org/ og https://runc.io/)
• Docker bruger linux-kernens control-groups og namespacing til at
"containe" en eller flere applikationer
From http://stackoverflow.com/a/36368012
18. Så hvad er docker 2/2
• Docker lader os beskrive hvordan et image bygges via en Dockerfile
• Så man efterfølgende kan starte en eller flere containere bygget på
imaget
Eksempel
• Et Ubuntu 16.04 image med apache, mod_php og mysql installeret der
bruges til
• Én container der kører apache med mod_php og forbinder til
• Én container der kører mysql
Container 1
"start apache"
Container 2
"start mysql"
Ubuntu LAMP
Image
Dockerfile
19. Dockerhub
• Github - nu bare for docker images
• Forking by design - man kan næsten ikke lave noget uden at stå på
skuldrene af andre
• Dockerfiles kan referere til lokale images såvel som remote
• Samme form for private/public opsætning - dog kun $1 pr. privat repo
From https://blog.docker.com/2015/01/docker-hub-improvements/
From https://www.docker.com/pricing
20. Eksempel: Dockerhub og Dockerfile
• Ubuntu 14.04 med apache + ssl + php https://hub.docker.com/r/reload/
drupal-apache-ssl/~/dockerfile/
21. Orkestrering
• At starte og forbinde containere kan være tricky (jfr antallet af
argumener på https://docs.docker.com/engine/reference/
commandline/run/ )
• Docker-compose bruges til at starte og samle containere
• Styrer hvordan containere deler volumes (tænk netværksdrev)
• Styrer hvorda de linkes (tænk firewall-åbninger og vpn-tuneller)
From https://blog.docker.com/2015/01/docker-hub-improvements/
22. web:
image: happyhacker/apache-php-fpm
ports:
- '80/tcp:80/tcp'
volumes:
- './web:/var/www/web'
links:
- fpm
php:
image: happyhacker/apache-php-fpm
volumes:
- './web:/var/www/web'
links:
- db
db:
image: mariadb:10
docker run docker run docker run
Container 1
Service: fpm
Container 2
Service: web
Container 3
Service: db
docker-compose up
Image 1 Image 2
Eksempel på docker-compose.yml
24. Vi besluttede os for én fælles approach
• Docker-deamon kører via Dlite https://github.com/nlf/dlite
• Fuldt udviklings-miljø beskrevet via docker-compose
• Optimering af "hvordan får jeg et prod-dump"
25. Dlite
• Giver næsten "The full Linux experience"
• X hypervisor + NFS
• Fremtiden er muligvis Docker for Mac
Mac OS
Dhyveos (linux)
Container
Container
X Hypervisor
Docker
Deamon
/Users/
(nfs)
/Users/
26. Databasedumps
• Hver nat henter et databasedump, bygges ind i et image og uploades til
dockerhub
• Dumpet hentes, importeres ind i en mariadb container, og datadir'et
trækkes ud
• Datadiret bygges ind i et image og uploades også til dockerhub
db-dump-worker
Prod
hub.docker.com db-datadir-worker
27. Docker-compose - real life og demo
• dds.dk
• spejderdk
• https://github.com/sl2017/spejderneslejrdk
29. Reload og docker
• Vi overvejer at generalisere db-dump processen nok til at kunne pakkes
i et værktøj andre kan få nytte af
• Det kunne være fedt at kunne reagere på "bløde" container-events så
som "nu er databasedumpet indlæst" så vi f.eks. kan køre updb
• Få lavet et par reference docker-compose setups med en endnu højere
stak (hitch -> varnish -> apache -> php-fpm)
• Vi fortsætter klart med at bruge Docker - måske også en dag til (vigtig)
produktion?
• Ind til videre kører vi vores database-workers som containers på en
selfhosted rancher (http://rancher.com/)
From http://www.curbed.com/2015/8/21/9928098/
crg-architects-shipping-container-towers