2. HAASTEITA SOFTATUOTANNOSSA
› Miten käyttöjärjestelmätason resursseja, muuttujia, säätöjä, ympäristöä
hallitaan?
› Miten taataan että kehitys ja testiympäristöt ovat vastaavat ja ympäristö ei
muutu matkalla?
› Miten voidaan käyttää resursseja tehokkaasti kun sovellus muodostuu
lukuisista osista, esim. kanta, palvelu1, palvelu2, palvelu3, ui, jne?
› Miten toimitaan kun kehitystiimissä on Windows, OSX ympäristöjä, ja
testiympäristöissä CentOS/Ubuntu?
› Mites se DevOps?
3. DOCKER
› Container-malli, jossa jaetaan käyttöjärjestelmätason kernel
• Käynnistyy välittömästi, käyttää vähemmän muistia, jakaa koneen
resursseja tehokkaammin
• Ei välitä ympäristöstään
• Tuo riippuvuutensa mukanaan
• Eristetty verkon ja resurssien osalta
• Rakennetaan ja suoritetaan puhtaassa ympäristössä, immutable
container malli
https://www.docker.com/
https://www.slideshare.net/jpetazzo/docker-and-go-why-did-we-decide-to-write-docker-in-go
5. DOCKER IMAGET
› Image = Sovelluspaketti, jossa kerroksittain muutoksia
• Pystytään uudelleenkäyttämään kerroksia suoraan, esim.
Ubuntu/JDK/munjavasovellus
› Container = yksittäinen ’instanssi’ imagen pohjalta
• Omat ympäristömuuttujat, omat portit, oma tiedostojärjestelmä
• Ideana ei ole tunkea konttiin kaikkea mitä tarvitaan, vaan yhdistellä kontteja
› Repository – paikka jonne sovelluspaketit varastoidaan ja mistä ne haetaan,
esim. https://hub.docker.com
docker run ubuntu /bin/echo 'Hello world'
docker run -t -i ubuntu /bin/bash
docker run hello-world
14. DOCKER REGISTRY
› Hah, sille on tietysti oma image
› Voit pullia sen ja alkaa ajamaan omaa priva-registryä jonne voi
pushia ja pullia Docker kontteja ja imageita
› docker pull registry
› docker run –d –p5000:5000 registry
15. DOCKER-COMPOSE
› Docker-compose auttaa hallitsemaan useammasta containerista
koostuvia kokonaisuuksia, jotka pitäisi käynnistää yhdessä
› Versio 1 ja 2 välillä suuria eroja, esim. linkitys vs dependency ja
network asetukset
https://github.com/vegasbrianc/docker-compose-demo
17. DOCKER + STACK
› Tulossa Docker 1.13 versiossa
› Kuten nimi vihjaa, kokoelma yhteenkuuluvia palveluita
› docker-cloud.yml
› Containerien sijasta luo palveluita (Service)
› Kuten docker-compose, mutta hieman enemmän
ympäristönhallintaa
• Deploy strategy, dns servers, restart-on-stop, roles, etc
• Eri stack tiedosto dev, staging, production, jne
https://docs.docker.com/docker-cloud/apps/stacks/
18. DOCKER SWARM
› Nyt päästään asiaan: Miten saada docker-ympäristöön mukaan
redundanssia, miten ajaa docker-kokonaisuuksia useampia rinnan?
› Docker Swarm on Docker-suunnalta tuleva ratkaisu tähän
› Service = edustapalvelin/proxy abstraktio
https://docs.docker.com/swarm/install-manual/
20. DOCKER SWARM
› Swarm muodostuu virtuaalikoneiden klusterista, ainakin yksi
manager node ja yksi tai useampi worker node
• Paikallisessa sandboxissa helpointa testata docker-machine
virtuaalikoneilla
24. KUBERNETES
› Googlella on ollut suuria tarpeita containerien käyttöön ja heidän
täytyi pystyä hallitsemaan niitä jo ennen kuin Docker Swarm saatiin
aikaan
› Apuna hallinnassa on väline nimeltä Kubernetes: Sillä on
päällekkäisyyttä Docker-compose ja Docker Swarm kanssa
› Erillinen CLI, erillinen API, erilliset yaml tiedostot
› Alunperin suosittu, mutta Swam kirii kiinni kovaa vauhtia…
http://kubernetes.io/
https://github.com/TheNewNormal/kube-cluster-osx
25. OPENSHIFT
› OpenShift on RedHat tekosia: Lisää työkaluja Docker ja Kubernetes
hallintaan
› Voisi ajatella, että tämä tuo abstraktion Kuberneteksen päälle, lisää
hallintatyökaluja ja automatiikkaa
› OpenShift on sekä ympäristö (Openshift online) että työkalupakki,
jota voi käyttää erillään, vaikka lokaalisti
28. TIPSUT JA TRIXXUT
› Imageissa löytyy useita vaihtoehtoja, on esim. erityisiä ‘lean java’ imageita
joissa vain minimit
› Kun image muodostuu layereistä, on fiksua ajaa aina cleanupit saman layer-
komennon yhteydessä
› Containereille on hyvä aina antaa labeleita, jotta ne löytää helposti
› Labeleilla voi ryhmitellä containereita nopeasti eri suunnista, esim.
• env=dev,staging,prod
• layer=front,backend,db
29. TIPSUT JA TRIXXUT
› Image-kansion voi siirtää eri paikkaan tilansäästömielessä, esim. muistikortilla
• Paitsi nykyisessä Docker for Mac versiossa…
• Teoriassa mahdollista linkittää…
• mv
~/Library/Containers/com.docker.docker/Data/com.docker.drive
r.amd64-linux/Docker.qcow2 /LargeDrive/Docker/Docker.qcow2
• ln -s /LargeDrive/Docker/Docker.qcow2
~/Library/Containers/com.docker.docker/Data/com.docker.drive
r.amd64-linux/Docker.qcow2
30. TIPSUT JA TRIXXUT
› Jos filu kasvaa lihavaksi, voi sen poistaa – huom siinä lähtee kaikki imaget!
• Quit Docker via menu
• rm
~/Library/Containers/com.docker.docker/Data/com.docker.drive
r.amd64-linux/Docker.qcow2
• Start Docker via Finder
31. TIPSUT JA TRIXXUT
› Miten kaikki/käyttämättömät imaget saa poistoon?
• docker rmi $(docker images –q)
• docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
• docker system prune (Docker 1.13)
32. DOCKER TUHMUUKSIA – ÄLÄ TEE!
› Dataa tai logeja containerin sisällä – käytä volume mappingiä!
› Kovakoodattuja viittauksia ip-osoitteisiin, containerien välillä –
käytä linkkejä, networkkejä, serviceitä!
› Uber containerit, jotka tekevät montaa asiaa yhtä aikaa – separation
of concerns!
› Fatit imaget, paljon tarpeettomia välivaiheita ja kerroksia, lihava
pohjaimage
› Credentiaaleja kontissa – sama kuin yleensä gitin kanssa myös