Docker - sovellusympäristöjen tulevaisuus?
Markus Mattinen
markus.mattinen@vincit.fi
+358 50 432 3912
TAUSTA: WEB-PALVELUIDEN KEHITYS
2
Vertikaalinen	
  
skaalautuminen
Tarkkaan	
  määritelty	
  
sovellusympäristö
Fyysiset	
  palvelimet	
  
palvelinsalissa
Horisontaalinen	
  
skaalautuminen
Kehittäjän	
  tarpeidensa	
  
mukaan	
  kokoama	
  
sovellusympäristö
Pilviympäristöt,	
  
virtualisointi
Keskitetyt	
  palvelut Hajautetut	
  palvelut
1. Ongelma
2. Ratkaisu: Docker
3. Dockerin tausta
4. Miten Docker toimii?
5. Docker vastaan virtualisointi
6. Esimerkkejä
7. Miten Vincit käyttää Dockeria?
8. Miten kokeilen Dockeria?
3
SISÄLLYSLUETTELO
• Sovellusten riippuvuudet
• Useasta lähteestä
• Voivat olla ristiriitaisia
‣ Asentaminen käsin työlästä
• Suoritusalustat
• Eri Linux-jakelut
• Pakettienhallinta ja riippuvuudet
• Virtualisointialustat ja pilviympäristöt
• Puhtaasta asennuksesta sovellukseen
4
ONGELMA
5
ONGELMA: SUORITUSALUSTAT
Web-­‐sivusto
Työprosessit
Käyttäjätietokanta
Analytiikkatietokanta
Viestijono
API
Frontend
Kehittäjän	
  
työkone	
  
(Mac)
Laadun-­‐
varmistus
Julkinen	
  
pilvialusta
Vara-­‐
järjestelmä
Yksityinen	
  
pilvialusta
Fyysiset	
  
tuotanto-­‐
palvelimet
Kehittäjän	
  
työkone	
  
(Linux)
Kehittäjän	
  
työkone	
  
(Windows)
Demo-­‐
palvelin
?
6
RATKAISU: SUORITUSALUSTAT
Web-­‐sivusto
Työprosessit
Käyttäjätietokanta
Analytiikkatietokanta
Viestijono
API
Kehittäjän	
  
työkone	
  
(Mac)
Julkinen	
  
pilvialusta
Vara-­‐
järjestelmä
Yksityinen	
  
pilvialusta
Fyysiset	
  
tuotanto-­‐
palvelimet
Kehittäjän	
  
työkone	
  
(Linux)
Kehittäjän	
  
työkone	
  
(Windows)
Demo-­‐
palvelin
Frontend
Laadun-­‐
varmistus
Docker
• Sovellusten paketointi- ja suoritusympäristö
• Docker-sovellus
• ei välitä ympäristöstään
✓Levitettävyys
• tuo riippuvuutensa mukanaan
✓Toistettavuus
• suoritetaan eristetyssä “hiekkalaatikossa”
✓Tietoturva
✓Ristiriidattomuus
7
RATKAISU: DOCKER
• Selkeä erottelu paketointi-, konfigurointi- ja
suoritusvaiheille
✓Tehtävien jakaminen
• Rakennetaan ja suoritetaan puhtaassa
ympäristössä
✓Eroosion välttäminen
!
‣ Paketoi kerran, aja missä tahansa
8
RATKAISU: DOCKER
• Kehitetään GitHubissa avoimesti
• https://github.com/dotcloud/docker
• Aloitettu 2013 alussa
• Jo 300 kehittäjää
• Merkittäviä käyttäjiä
• Yandex Cocaine, Baidu App Engine
9
DOCKERIN TAUSTA
• Sovelluspaketti (image)
• Kerroksia
• Kirjastoja ja ohjelmakoodia
• Sovellus (container)
• Yksi tai useampia prosesseja
• Ympäristömuuttujat
• Portit ja ip-osoitteet
• Oma tiedostojärjestelmäkerros
10
MITEN DOCKER TOIMII?
MITEN DOCKER TOIMII?
11
Kirjasto	
  B
Sovellus	
  1
Sovellus	
  2
Sovellus	
  3Kirjasto	
  A
Sovellus	
  4
Käyttöjärjestelmä	
  	
  
(Linux)
Docker	
  
+	
  LXC
Sovelluspakettien	
  kerroksia
Sovelluksia
• Kerrokset (layer)
• Copy-on-Write
• versiointi
• levytilan säästö
• Volyymit (volume)
• Muuttuvan datan säilyttämiseen
• Voidaan jakaa sovellusten välillä
12
MITEN DOCKER TOIMII?
• Repository
• sovelluspakettien säilytyspaikka
• https://index.docker.io tai yksityinen
• Dockerfile
• Kuvaa sovelluksen riippuvuuksia ja tarpeita
• Komentojen tulokset välimuistiin
13
MITEN DOCKER TOIMII?
• Linkit
• Liitetään esim. tietokanta sovellukseen
• Ympäristömuuttujat
• Komennot
• build: Dockerfile + ohjelmakoodi = paketti
• push: paketin julkaiseminen repositoryyn
• pull: paketin noutaminen tai päivittäminen
• run: Sovellus käyntiin
14
MITEN DOCKER TOIMII?
15
ESIMERKKI-WORKFLOW
Dockerfile
Ohjelmakoodi
Paketti Repository
Repository Paketti
Konfiguraatio
Sovellus
• build + push (kehittäjän työkoneella)
• pull + run (palvelinkoneella tai pilviympäristössä)
Volyymit
• Docker on kevyt:
• suorituskyky ei laske
• muistia ja levytilaa kuluu vähemmän
• sovellus nopea käynnistää ja poistaa
16
DOCKER VASTAAN VIRTUALISOINTI
DOCKER VASTAAN VIRTUALISOINTI
17
Kirjasto	
  B
Sovellus	
  1
Sovellus	
  2
Sovellus	
  3Kirjasto	
  A
Sovellus	
  4
Kirjasto	
  A Kirjasto	
  B Sovellus	
  1Käyttöjärjestelmä
Kirjasto	
  A Kirjasto	
  B Sovellus	
  2Käyttöjärjestelmä
Kirjasto	
  A Kirjasto	
  B Sovellus	
  3Käyttöjärjestelmä
Kirjasto	
  A Sovellus	
  4Käyttöjärjestelmä
Docker
Virtuaalikoneet
Käyttö-­‐	
  
järjestelmä
Virtualisointi
Käyttö-­‐	
  
järjestelmä
Docker
• Docker keskittyy sovelluksiin:
• työkaluja konfigurointiin, versiointiin,
monitorointiin, porttien ja lokien hallintaan…
• suoritusympäristössä voidaan ajaa komentoja
ilman erillisiä työkaluja
18
DOCKER VASTAAN VIRTUALISOINTI
• Docker toimii lähes missä vain:
• pilvessä: Google Cloud Platform, Rackspace
Cloud, Amazon EC2, DigitalOcean…
• virtualisointialustoilla: Xen, KVM, VirtualBox,
VMWare Server, ESXi…
19
DOCKER VASTAAN VIRTUALISOINTI
FROM ubuntu:12.04
!
RUN apt-get update
RUN apt-get install -y apache2
!
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
!
EXPOSE 80
!
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
20
DOCKERFILE-ESIMERKKEJÄ
FROM vincit/apache2
!
RUN apt-get update
RUN apt-get install -y php5 libapache2-mod-php5
php5-pgsql php5-cli
!
ADD config/php.ini /etc/php5/php.ini
!
ADD config/www /var/www
!
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
21
DOCKERFILE-ESIMERKKEJÄ
22
ESIMERKKIKOMENTOJA
docker run -d -p 5432:5432 -name postgresql_instance orchardup/postgresql
• Sovelluspaketin rakentaminen (kansiossa, jossa on Dockerfile)
docker build -t web-sovellus .
• Tietokannan käynnistäminen
23
ESIMERKKIKOMENTOJA
docker ps
• Käynnissä olevien sovellusten tarkastelu
IMAGE PORTS NAMES
web-sovellus:latest 0.0.0.0:49153->80/tcp angry_pare
orchardup/postgresql:latest 0.0.0.0:5432->5432/tcp angry_pare/database,postgresql_instance
docker run -d -p 80 -link postgresql_instance:database my-web-app
• Sovelluksen käynnistäminen, tietokannan linkkaaminen
• Demo-palvelin
• staging, asiakasdemot, teknologiademot
• Taustalla Dokku: Docker-pohjainen mini-Heroku
• Sovelluksen julkaiseminen
!
!
!
• Tietokannat
• Reverse proxy
24
MITEN VINCIT KÄYTTÄÄ DOCKERIA?
git remote add dokku dokku@demoserver:projekti
git push dokku HEAD:master
• Windows
• Vagrant + VirtualBox + boot2docker
• Mac OS X
• Vagrant + VirtualBox
!
!
!
• Linux
• Kernel 3.8+ suositeltu
25
MITEN KOKEILEN DOCKERIA?
brew tap homebrew/binary && brew install docker
brew tap fnichol/dvm && brew install dvm
curl -sL https://get.docker.io | sh
www.vincit.fi
KYSYMYKSIÄ?
www.vincit.fi
KIITOS
Markus Mattinen
markus.mattinen@vincit.fi
+358 50 432 3912

Docker – sovellusympäristöjen tulevaisuus? - Vincit Teatime 2014

  • 1.
    Docker - sovellusympäristöjentulevaisuus? Markus Mattinen markus.mattinen@vincit.fi +358 50 432 3912
  • 2.
    TAUSTA: WEB-PALVELUIDEN KEHITYS 2 Vertikaalinen   skaalautuminen Tarkkaan  määritelty   sovellusympäristö Fyysiset  palvelimet   palvelinsalissa Horisontaalinen   skaalautuminen Kehittäjän  tarpeidensa   mukaan  kokoama   sovellusympäristö Pilviympäristöt,   virtualisointi Keskitetyt  palvelut Hajautetut  palvelut
  • 3.
    1. Ongelma 2. Ratkaisu:Docker 3. Dockerin tausta 4. Miten Docker toimii? 5. Docker vastaan virtualisointi 6. Esimerkkejä 7. Miten Vincit käyttää Dockeria? 8. Miten kokeilen Dockeria? 3 SISÄLLYSLUETTELO
  • 4.
    • Sovellusten riippuvuudet •Useasta lähteestä • Voivat olla ristiriitaisia ‣ Asentaminen käsin työlästä • Suoritusalustat • Eri Linux-jakelut • Pakettienhallinta ja riippuvuudet • Virtualisointialustat ja pilviympäristöt • Puhtaasta asennuksesta sovellukseen 4 ONGELMA
  • 5.
    5 ONGELMA: SUORITUSALUSTAT Web-­‐sivusto Työprosessit Käyttäjätietokanta Analytiikkatietokanta Viestijono API Frontend Kehittäjän   työkone   (Mac) Laadun-­‐ varmistus Julkinen   pilvialusta Vara-­‐ järjestelmä Yksityinen   pilvialusta Fyysiset   tuotanto-­‐ palvelimet Kehittäjän   työkone   (Linux) Kehittäjän   työkone   (Windows) Demo-­‐ palvelin ?
  • 6.
    6 RATKAISU: SUORITUSALUSTAT Web-­‐sivusto Työprosessit Käyttäjätietokanta Analytiikkatietokanta Viestijono API Kehittäjän   työkone   (Mac) Julkinen   pilvialusta Vara-­‐ järjestelmä Yksityinen   pilvialusta Fyysiset   tuotanto-­‐ palvelimet Kehittäjän   työkone   (Linux) Kehittäjän   työkone   (Windows) Demo-­‐ palvelin Frontend Laadun-­‐ varmistus Docker
  • 7.
    • Sovellusten paketointi-ja suoritusympäristö • Docker-sovellus • ei välitä ympäristöstään ✓Levitettävyys • tuo riippuvuutensa mukanaan ✓Toistettavuus • suoritetaan eristetyssä “hiekkalaatikossa” ✓Tietoturva ✓Ristiriidattomuus 7 RATKAISU: DOCKER
  • 8.
    • Selkeä erottelupaketointi-, konfigurointi- ja suoritusvaiheille ✓Tehtävien jakaminen • Rakennetaan ja suoritetaan puhtaassa ympäristössä ✓Eroosion välttäminen ! ‣ Paketoi kerran, aja missä tahansa 8 RATKAISU: DOCKER
  • 9.
    • Kehitetään GitHubissaavoimesti • https://github.com/dotcloud/docker • Aloitettu 2013 alussa • Jo 300 kehittäjää • Merkittäviä käyttäjiä • Yandex Cocaine, Baidu App Engine 9 DOCKERIN TAUSTA
  • 10.
    • Sovelluspaketti (image) •Kerroksia • Kirjastoja ja ohjelmakoodia • Sovellus (container) • Yksi tai useampia prosesseja • Ympäristömuuttujat • Portit ja ip-osoitteet • Oma tiedostojärjestelmäkerros 10 MITEN DOCKER TOIMII?
  • 11.
    MITEN DOCKER TOIMII? 11 Kirjasto  B Sovellus  1 Sovellus  2 Sovellus  3Kirjasto  A Sovellus  4 Käyttöjärjestelmä     (Linux) Docker   +  LXC Sovelluspakettien  kerroksia Sovelluksia
  • 12.
    • Kerrokset (layer) •Copy-on-Write • versiointi • levytilan säästö • Volyymit (volume) • Muuttuvan datan säilyttämiseen • Voidaan jakaa sovellusten välillä 12 MITEN DOCKER TOIMII?
  • 13.
    • Repository • sovelluspakettiensäilytyspaikka • https://index.docker.io tai yksityinen • Dockerfile • Kuvaa sovelluksen riippuvuuksia ja tarpeita • Komentojen tulokset välimuistiin 13 MITEN DOCKER TOIMII?
  • 14.
    • Linkit • Liitetäänesim. tietokanta sovellukseen • Ympäristömuuttujat • Komennot • build: Dockerfile + ohjelmakoodi = paketti • push: paketin julkaiseminen repositoryyn • pull: paketin noutaminen tai päivittäminen • run: Sovellus käyntiin 14 MITEN DOCKER TOIMII?
  • 15.
    15 ESIMERKKI-WORKFLOW Dockerfile Ohjelmakoodi Paketti Repository Repository Paketti Konfiguraatio Sovellus •build + push (kehittäjän työkoneella) • pull + run (palvelinkoneella tai pilviympäristössä) Volyymit
  • 16.
    • Docker onkevyt: • suorituskyky ei laske • muistia ja levytilaa kuluu vähemmän • sovellus nopea käynnistää ja poistaa 16 DOCKER VASTAAN VIRTUALISOINTI
  • 17.
    DOCKER VASTAAN VIRTUALISOINTI 17 Kirjasto  B Sovellus  1 Sovellus  2 Sovellus  3Kirjasto  A Sovellus  4 Kirjasto  A Kirjasto  B Sovellus  1Käyttöjärjestelmä Kirjasto  A Kirjasto  B Sovellus  2Käyttöjärjestelmä Kirjasto  A Kirjasto  B Sovellus  3Käyttöjärjestelmä Kirjasto  A Sovellus  4Käyttöjärjestelmä Docker Virtuaalikoneet Käyttö-­‐   järjestelmä Virtualisointi Käyttö-­‐   järjestelmä Docker
  • 18.
    • Docker keskittyysovelluksiin: • työkaluja konfigurointiin, versiointiin, monitorointiin, porttien ja lokien hallintaan… • suoritusympäristössä voidaan ajaa komentoja ilman erillisiä työkaluja 18 DOCKER VASTAAN VIRTUALISOINTI
  • 19.
    • Docker toimiilähes missä vain: • pilvessä: Google Cloud Platform, Rackspace Cloud, Amazon EC2, DigitalOcean… • virtualisointialustoilla: Xen, KVM, VirtualBox, VMWare Server, ESXi… 19 DOCKER VASTAAN VIRTUALISOINTI
  • 20.
    FROM ubuntu:12.04 ! RUN apt-getupdate RUN apt-get install -y apache2 ! ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ! EXPOSE 80 ! CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] 20 DOCKERFILE-ESIMERKKEJÄ
  • 21.
    FROM vincit/apache2 ! RUN apt-getupdate RUN apt-get install -y php5 libapache2-mod-php5 php5-pgsql php5-cli ! ADD config/php.ini /etc/php5/php.ini ! ADD config/www /var/www ! CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] 21 DOCKERFILE-ESIMERKKEJÄ
  • 22.
    22 ESIMERKKIKOMENTOJA docker run -d-p 5432:5432 -name postgresql_instance orchardup/postgresql • Sovelluspaketin rakentaminen (kansiossa, jossa on Dockerfile) docker build -t web-sovellus . • Tietokannan käynnistäminen
  • 23.
    23 ESIMERKKIKOMENTOJA docker ps • Käynnissäolevien sovellusten tarkastelu IMAGE PORTS NAMES web-sovellus:latest 0.0.0.0:49153->80/tcp angry_pare orchardup/postgresql:latest 0.0.0.0:5432->5432/tcp angry_pare/database,postgresql_instance docker run -d -p 80 -link postgresql_instance:database my-web-app • Sovelluksen käynnistäminen, tietokannan linkkaaminen
  • 24.
    • Demo-palvelin • staging,asiakasdemot, teknologiademot • Taustalla Dokku: Docker-pohjainen mini-Heroku • Sovelluksen julkaiseminen ! ! ! • Tietokannat • Reverse proxy 24 MITEN VINCIT KÄYTTÄÄ DOCKERIA? git remote add dokku dokku@demoserver:projekti git push dokku HEAD:master
  • 25.
    • Windows • Vagrant+ VirtualBox + boot2docker • Mac OS X • Vagrant + VirtualBox ! ! ! • Linux • Kernel 3.8+ suositeltu 25 MITEN KOKEILEN DOCKERIA? brew tap homebrew/binary && brew install docker brew tap fnichol/dvm && brew install dvm curl -sL https://get.docker.io | sh
  • 26.
  • 27.