Docker - sovellusympäristöjen tulevaisuus?
Markus Mattinen [email protected] +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 4Kä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
KIITOSMarkus Mattinen [email protected] +358 50 432 3912
Recommended