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

Docker All The Thins @Turistforeningen

Hans Kristian Flaatten
September 24, 2015
50

Docker All The Thins @Turistforeningen

Hans Kristian Flaatten talks about moving the infrastructure of the Norwegian Trekking Association (DNT) over to Docker.

Hans Kristian Flaatten

September 24, 2015
Tweet

Transcript

  1. Docker all the Things @Turistforeningen Hans Kristian Flaatten @Starefossen 1

    Bergen Linux User Group Torsdag 24. september 2015 Bergen Offentlige Bibliotek
  2. Hvem har… ✔ hørt om Docker? ✔ kjørt en Docker-applikasjon?

    ✔ kjørt en Docker-applikasjon i prod? ✔ brukt Compose, Machine, eller Swarm? 3
  3. Outline • Docker 101 • Docker @Turistforeningen • Node.js @Docker

    • Docker Hub • Docker Compose • Docker Machine • Andre Docker Verktøy • Beste praksis • Erfaringer 4
  4. Hans Kristian Flaatten • 25 år, # gift, $ 11

    mnd. • Informatikk @NTNU • DevOps @Turistforeningen • Docker & Build WG @NodeJS • Forkjemper for åpen kildekode! 5
  5. Docker i 2015 • Docker v1.8.2 (10. september) • 1.100

    bidragsytere og 25.000 @GitHub • 100.000+ "Dockerized" applikasjoner i Docker Hub • 3 til 4 millioner utviklere bruker Docker • 400 millioner nedlastinger • 50.000 Docker-relaterte prosjekter 8
  6. Docker • Bygge, distribuere, og kjøre applikasjoner • Åpen plattform

    • Standardisert format • Selvforsynt containere • Isolert avhengigheter 10
  7. VM vs. Container 11 Containere er isolert, men deler OS,

    og eventuelle binærfiler / biblioteker
  8. Image vs. Container • Images er uforanderlige (immutable) • Bygges

    lokalt eller laste ned fra Docker Hub • Bygget opp av flere «lag» • Basert på et «Baseimage» • Container er en «instans» av et Image 12
  9. Dockerfile 13 # This is a comment FROM python:2.7 MAINTAINER

    Hans Kristian <[email protected]> RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
  10. Client→Engine←Registry • Docker Deamon + REST(ish) API • Docker Client

    (CLI) snakker med APIet • Deamon håndterer Docker containere • Startes med: docker -d • docker version for å teste oppsett 14
  11. Docker CLI 16 docker build Bygg et Image fra en

    Dockerfile docker pull Hent et Image fra Docker Hub docker images Se alle Images på maskinen docker run Kjør et Image i en Container docker ps Se alle stoppet/kjørende Containere docker stop Sopp en kjørende Container docker rm Slett en stoppet Container docker rmi Slett et Image
  12. 17 $ docker build -t blug/tutorial . $ docker pull

    postgres $ docker run -d --name db postgres $ docker run \ --link db:db \ --volume "$(pwd):/code" \ --publish 8080:8000 \ blug/tutorial python manage.py runserver
  13. 20

  14. Kildekode • Alt ligger på GitHub • Liberal BSD/MIT lisens

    • github.com/Turistforeningen • github.com/Trubasen 21
  15. 22

  16. 23

  17. 24

  18. 26 2012 2013 2014 2015 Tekstfil Tekstfil med instruksjon for

    oppsett av prodmiljø Virtuell Maskin Forhåndsinstallert virtuell maskin for utviklere VM + Docker Virtuell maskin med en stor Docker Container Docker Compose Alle avhengigheter i egne Docker Containere
  19. python 1st. gen. ssh crontab nginx memcached python python 2nd

    gen. nginx 2nd gen. crontab 27 python 3nd gen. memcached ssh crontab memcached postgres 1st gen. postgres 2rd. gen ssh crontab haproxy
  20. 31

  21. Node.js Docker Image • Følger Docker beste praksis • Basert

    på buildpack-deps:jessie • Benytter standard Docker tags • latest, slim, onbuild + wheezy 32
  22. Tagger og varianter • docker pull node:0.12 # ! 0.12.7

    • docker pull node:4.1.1 • docker pull node:latest # ! 4.1.1 • docker pull node:latest-slim # ! 4.1.1 • docker pull node:4-wheezy 33
  23. Oppdatere Docker Hub • Oppdater alle Dockerfiler • GIT push

    til nodejs/docker-node • Kjør ./generate-stackbrew-library.sh • PR til docker-libarary/official-images 34
  24. Docker Hub • Offentlige og private Docker Images • Offisielle

    Docker Images • Medlemmer, og organisasjoner • Automatisk bygging • Webhooks • https://hub.dokcer.com 36
  25. 37

  26. Private Images • Ikke søkbare • Legge til medlemmer for

    pull eller push • Bare du og medlemmer har tilgang • 1 privat Image gratis – docker.com/pricing 38
  27. Automatisk bygg • Linke Images til GitHub eller Bitbucket •

    Holder Imaget i sync med koden • Bygges automatisk ved push • Offentlige eller private Images 39
  28. Automatisk bygg med lenker Hva om base-imaget ditt blir oppdatert?

    • Lenke et automatisert bygg til et annet image • Holder imaget ditt oppdatert for deg 40
  29. Webhooks • Trigge et nytt build fra en ekstern tjeneste

    (CI?) • Post-build webhook når imaget er bygget • Kan lenkes sammen til en kjede 41
  30. Dette kommer... • Se størrelse på Images • Støtte for

    automatisert bygging via GitLab • Dynamisk tagging av automatiserte bygg 43
  31. Multi-container apps er stress. • Bygge Images fra Dockerfiler •

    Henter Images fra Docker Hub • Starter og lenker sammen containere • Stømme log output 45
  32. Multi-container apps er stress. 46 $ docker build -t blug/tutorial

    . $ docker pull postgres $ docker run -d --name db postgres $ docker run \ --link db:db \ --publish 8080:8000 \ blug/tutorial \ python manage.py runserver
  33. Multi-container apps er stress. 47 $ docker pull ... $

    docker pull ... $ docker build ... $ docker build ... $ docker run ... $ docker run ... $ docker run ... $ docker run ...
  34. Under panseret • Skrevet i Python • Bruker samme API

    som Docker CLI klienten • Bruker samme API som andre Docker verktøy 49
  35. docker-compose.yml 50 db: image: postgres web: build: . command: python

    manage.py runserver volumes: - .:/code ports: - "8000:8000" links: - db
  36. Docker Machine • Maskin-administrering for container sentrisk verden • Setter

    opp virtuelle maskiner • Setter opp Docker Engine • Administrere servere 53
  37. Oppsett av OS • Installerer og konfigurere Docker på flere

    OS • Følgende OS er støttet • Boot2Docker • RancherOS • Ubuntu • Debian • RedHat: RHEL, Fedora, CentOS 55
  38. Bruksområder • Lokalt utviklingsmiljø • Erstatter Boot2Docker • Koble til

    ekstern Docker-miljø • Oppsett av Swarm Cluster • Teste av ulike Docker versjoner 56
  39. Generelle retninglinjer • Containere bør være immutable • Husk .dockerignore

    • Unngå unødvendige pakker • En prosess per container 59
  40. Minimer antall lag 60 FROM uvuntu:14.04 MAINTAINER Hans Kristian <[email protected]>

    RUN apt-get update RUN apt-get install -y bzr RUN apt-get install -y cvs RUN apt-get install -y git RUN apt-get install -y mercurial RUN apt-get install -y subversion
  41. Minimer antall lag 61 FROM uvuntu:14.04 MAINTAINER Hans Kristian <[email protected]>

    RUN apt-get update && apt-get install -y \ bzr \ cvs \ git \ mercurial \ subversion
  42. Caching 62 FROM python:2.7 MAINTAINER Hans Kristian <[email protected]> RUN mkdir

    /code WORKDIR /code ADD . /code/ RUN pip install -r requirements.txt
  43. Caching 63 FROM python:2.7 MAINTAINER Hans Kristian <[email protected]> RUN mkdir

    /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
  44. Se på offisielle Images • Go – hub.docker.com/_/golang/ • Wordpress

    – hub.docker.com/_/wordpress/ • PostgreSQL – hub.docker.com/_/postgres/ • Nginx – hub.docker.com/_/nginx/ • Registry – hub.docker.com/_/registry/ 64
  45. Utfordringer • Build Containers vs. Run Containers • Supersmå images

    basert på Alphine Linux (~5MB!) • Resurser under bygging • Security model • Operational Tools • Container Garbage Collection 66
  46. 67

  47. Docker. Docker. Docker. • Docker Swarm • Clustring av Docker

    hosts • Docker Kitmatic • Desktop GUI for Docker • Docker Toolbox • http://docs.docker.com 69
  48. 3. parts verktøy • Dokku - Docker powered mini-Heroku •

    Shipyard – Docker cluster management • Rancher – A Platform for Operating Docker • Flocker – Container Data Volume Manager • tsuru – Open source Platform as a Service 70
  49. Oppsummering • Docker egentlig veldig enkelt • …men det blir

    fort komplekst • Docker Hub • Docker Compose • Docker Machine 71