SlideShare une entreprise Scribd logo
1  sur  34
KONTIT
POMPPIMAAN
Docker, Kubernetes, OpenShift
arto.santala@solita.fi
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?
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
MITÄ KAIKKEE?
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
MUT HEI, MIKSEI VAGRANT+ANSIBLE?
DOCKER KÄYTTÖÖNOTTO
› Docker Toolbox
› Docker for Mac
› Docker for Windows
› Tai ihan vaan tuttavallisesti:
• brew cask install docker
AJA JAVA YSILLÄ?
› docker run -it --rm openjdk:9-jdk java –version
› docker run -it --rm openjdk:9-jdk
› docker run –d –p 8080:8080 -v /tmp:/java
openjdk:9-jdk sh -c "cd /java; javac *.java; jar
myapp.jar *; java –jar myapp.jar”
MITEN HALLINNOIDAAN?
› docker ps
› docker ps –a
› docker stop #CONTAINERID
› docker rm #CONTAINERID
› docker build –t munsofta .
› docker history munsofta
› docker logs #CONTAINERID
› docker save munsofta –o
munsofta.tar
› docker load –i
./munsofta.tar
› docker rmi munsofta
DOCKERFILE
› Sensijaan että ajaisit dockeria komentoriviltä, voit määrittää
haluamasi konfiguraatiot tiedostoon
› Tiedosto voidaan ajaa, toistaa, levittää, versioida, jne
› Sovelluksen riippuvuudet ja tarpeet
• Docker build: rakennetaan paketti
• Docker run: Potkaistaan käyntiin
• Docker push: Julkaistaan repositoryyn
• Docker pull: Noudetaan paketti repositorystä
DOCKERFILE
FROM openjdk:8
VOLUME /tmp
ADD target/indexserver.jar app.jar
RUN sh -c 'touch /app.jar'ENTRYPOINT ["java","-
Djava.security.egd=file:/dev/./urandom","-
Dspring.profiles.active=docker","-Xmx1024m","-
jar","/app.jar"]
DOCKERFILE
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
ENV NGINX_HOST foobar.com
ENV NGINX_PORT 80
EXPOSE 80
CMD nginx”, “-g”, “’daemon off;’”]
DOCKERFILE
FROM dockerfile/ubuntu
RUN 
add-apt-repository -y ppa:nginx/stable && 
apt-get update && 
apt-get install -y nginx && 
rm -rf /var/lib/apt/lists/* && 
echo "ndaemon off;" >> /etc/nginx/nginx.conf && 
chown -R www-data:www-data /var/lib/nginx
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs",
"/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80 EXPOSE 443
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
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
DOCKER-COMPOSE
version: '2’
services:
elasticsearch:
build: ./elastic
environment:
- ES_HEAP_SIZE=4g
command: elasticsearch -Des.network.host=0.0.0.0
ports:
- "9200:9200”
- "9300:9300”
volumes:
- ./elastic/esdata:/usr/share/elasticsearch/data
pdfindexer:
build: ./indexserver
ports:
- "8080:8080”
depends_on:
- elasticsearch
volumes:
- ./indexserver/pdf-files:/pdf-files:ro
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/
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/
SWARM MODE: ACTIVE
DOCKER SWARM
› Swarm muodostuu virtuaalikoneiden klusterista, ainakin yksi
manager node ja yksi tai useampi worker node
• Paikallisessa sandboxissa helpointa testata docker-machine
virtuaalikoneilla
OSX TESTAILUA: VALMISTELU
docker-machine create --driver virtualbox manager1
docker-machine create --driver virtualbox worker1
docker-machine create --driver virtualbox worker2
https://github.com/docker/labs/tree/master/swarm-mode/beginner-tutorial
OSX TESTAILUA: SWARM LUONTI
docker-machine ssh manager1 "docker swarm init --listen-addr $(docker-
machine ip manager1) --advertise-addr $(docker-machine ip manager1)”
export worker_token=`docker-machine ssh manager1 "docker swarm join-token
worker -q"`
docker-machine ssh worker1 "docker swarm join --token $worker_token --
listen-addr $(docker-machine ip worker1) --advertise-addr $(docker-machine
ip worker1) $(docker-machine ip manager1):2377"
docker-machine ssh worker2 "docker swarm join --token $worker_token --
listen-addr $(docker-machine ip worker2) --advertise-addr $(docker-machine
ip worker2) $(docker-machine ip manager1):2377"
OSX TESTAILUA: KÄYTTÖ
docker-machine ssh manager1 docker node ls
docker-machine ssh worker1 docker swarm leave
docker-machine ssh worker2 docker swarm leave
docker-machine ssh manager1 docker swarm leave --force
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
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
OPENSHIFT CLOUDFORMS
DOCKER MONITOROINTI
› Dockerin omat kilkkeet
• docker logs, docker ps, docker inspect, docker stats
• echo -e "GET /containers/[CONTAINER_NAME]/stats HTTP/1.0rn"
| nc -U /var/run/docker.sock
› CAdvisor, Prometheus, Sensu, Logz.io
› Scout, Data Dog, Sysdig, New Relic, Dynatrace, SignalFx
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
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
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
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)
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
KIITOS!
› Palautetta, lisää näkökantoja?
https://github.com/crystoll/kontitpomppimaan
Kontit pomppimaan3

Contenu connexe

En vedette (10)

Impactday maximizinglinkedinandsocialmediafornon-profitspzvupdates-1206081755...
Impactday maximizinglinkedinandsocialmediafornon-profitspzvupdates-1206081755...Impactday maximizinglinkedinandsocialmediafornon-profitspzvupdates-1206081755...
Impactday maximizinglinkedinandsocialmediafornon-profitspzvupdates-1206081755...
 
India - A coming of Age
India - A coming of AgeIndia - A coming of Age
India - A coming of Age
 
Access to cap sbw (may) (2)
Access to cap sbw (may) (2)Access to cap sbw (may) (2)
Access to cap sbw (may) (2)
 
140625 vi pad webinar_collaboration tools
140625 vi pad webinar_collaboration tools140625 vi pad webinar_collaboration tools
140625 vi pad webinar_collaboration tools
 
Béo bụng, vòng 2 quá khổ gây nhiều bệnh mạn tính nguy hiểm
Béo bụng, vòng 2 quá khổ gây nhiều bệnh mạn tính nguy hiểmBéo bụng, vòng 2 quá khổ gây nhiều bệnh mạn tính nguy hiểm
Béo bụng, vòng 2 quá khổ gây nhiều bệnh mạn tính nguy hiểm
 
Corporate Wellness Pogramming To Maximize Return on Investment (ROI)
Corporate Wellness Pogramming To Maximize Return on Investment (ROI)Corporate Wellness Pogramming To Maximize Return on Investment (ROI)
Corporate Wellness Pogramming To Maximize Return on Investment (ROI)
 
Community structure in complex networks
Community structure in complex networksCommunity structure in complex networks
Community structure in complex networks
 
Magazine Questionnaire
Magazine QuestionnaireMagazine Questionnaire
Magazine Questionnaire
 
MS_Thesis
MS_ThesisMS_Thesis
MS_Thesis
 
роосийский транспортный рынок 2013
роосийский транспортный рынок 2013роосийский транспортный рынок 2013
роосийский транспортный рынок 2013
 

Similaire à Kontit pomppimaan3

Net ohjelmointi kertaus
Net ohjelmointi kertausNet ohjelmointi kertaus
Net ohjelmointi kertaus
Timo Tanila
 

Similaire à Kontit pomppimaan3 (20)

Docker – sovellusympäristöjen tulevaisuus? - Vincit Teatime 2014
Docker – sovellusympäristöjen tulevaisuus? - Vincit Teatime 2014Docker – sovellusympäristöjen tulevaisuus? - Vincit Teatime 2014
Docker – sovellusympäristöjen tulevaisuus? - Vincit Teatime 2014
 
Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017
 
Konttiratkaisujen tietoturva - Tero Niemistö
Konttiratkaisujen tietoturva - Tero NiemistöKonttiratkaisujen tietoturva - Tero Niemistö
Konttiratkaisujen tietoturva - Tero Niemistö
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
 
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
 
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
Vincit Teatime 2015 - Niko Kurtti: Case Shopify: SaaS:n testaaminen, mihin un...
 
Pilven rakennusaineet
Pilven rakennusaineetPilven rakennusaineet
Pilven rakennusaineet
 
Nebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development ProfessionalNebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development Professional
 
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystäNebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
 
Miten toimii OwnCloud ja onko se NSA:n urkinnalta suojattu tapa tallentaa jak...
Miten toimii OwnCloud ja onko se NSA:n urkinnalta suojattu tapa tallentaa jak...Miten toimii OwnCloud ja onko se NSA:n urkinnalta suojattu tapa tallentaa jak...
Miten toimii OwnCloud ja onko se NSA:n urkinnalta suojattu tapa tallentaa jak...
 
Mac-työasemat ylläpidon kiusana
Mac-työasemat ylläpidon kiusanaMac-työasemat ylläpidon kiusana
Mac-työasemat ylläpidon kiusana
 
Ser web
Ser webSer web
Ser web
 
AgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenAgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti Vartiainen
 
Solita /dev/cloud kickstart
Solita /dev/cloud kickstartSolita /dev/cloud kickstart
Solita /dev/cloud kickstart
 
Linuxin perusteet / Linux basics
Linuxin perusteet / Linux basicsLinuxin perusteet / Linux basics
Linuxin perusteet / Linux basics
 
W3: Hajautettua versionhallintaa - Git & GitHub
W3: Hajautettua versionhallintaa - Git & GitHubW3: Hajautettua versionhallintaa - Git & GitHub
W3: Hajautettua versionhallintaa - Git & GitHub
 
Java9 moduulit jigsaw
Java9 moduulit jigsawJava9 moduulit jigsaw
Java9 moduulit jigsaw
 
Net ohjelmointi kertaus
Net ohjelmointi kertausNet ohjelmointi kertaus
Net ohjelmointi kertaus
 
Vähemmän ja nopeammin – Välimuistivinkit WordPress-kehittäjille
Vähemmän ja nopeammin – Välimuistivinkit WordPress-kehittäjilleVähemmän ja nopeammin – Välimuistivinkit WordPress-kehittäjille
Vähemmän ja nopeammin – Välimuistivinkit WordPress-kehittäjille
 
Java - analysointityökaluja
Java - analysointityökalujaJava - analysointityökaluja
Java - analysointityökaluja
 

Plus de Arto Santala

Plus de Arto Santala (8)

Your Brain on Java
Your Brain on JavaYour Brain on Java
Your Brain on Java
 
Java On Speed
Java On SpeedJava On Speed
Java On Speed
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11
 
API Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäAPI Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiä
 
Leaner microservices with Java 10
Leaner microservices with Java 10Leaner microservices with Java 10
Leaner microservices with Java 10
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)
 
Syvemmälle javaan
Syvemmälle javaanSyvemmälle javaan
Syvemmälle javaan
 
JavaOne 2016 short highlights
JavaOne 2016 short highlightsJavaOne 2016 short highlights
JavaOne 2016 short highlights
 

Kontit pomppimaan3

  • 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
  • 6. MUT HEI, MIKSEI VAGRANT+ANSIBLE?
  • 7. DOCKER KÄYTTÖÖNOTTO › Docker Toolbox › Docker for Mac › Docker for Windows › Tai ihan vaan tuttavallisesti: • brew cask install docker
  • 8. AJA JAVA YSILLÄ? › docker run -it --rm openjdk:9-jdk java –version › docker run -it --rm openjdk:9-jdk › docker run –d –p 8080:8080 -v /tmp:/java openjdk:9-jdk sh -c "cd /java; javac *.java; jar myapp.jar *; java –jar myapp.jar”
  • 9. MITEN HALLINNOIDAAN? › docker ps › docker ps –a › docker stop #CONTAINERID › docker rm #CONTAINERID › docker build –t munsofta . › docker history munsofta › docker logs #CONTAINERID › docker save munsofta –o munsofta.tar › docker load –i ./munsofta.tar › docker rmi munsofta
  • 10. DOCKERFILE › Sensijaan että ajaisit dockeria komentoriviltä, voit määrittää haluamasi konfiguraatiot tiedostoon › Tiedosto voidaan ajaa, toistaa, levittää, versioida, jne › Sovelluksen riippuvuudet ja tarpeet • Docker build: rakennetaan paketti • Docker run: Potkaistaan käyntiin • Docker push: Julkaistaan repositoryyn • Docker pull: Noudetaan paketti repositorystä
  • 11. DOCKERFILE FROM openjdk:8 VOLUME /tmp ADD target/indexserver.jar app.jar RUN sh -c 'touch /app.jar'ENTRYPOINT ["java","- Djava.security.egd=file:/dev/./urandom","- Dspring.profiles.active=docker","-Xmx1024m","- jar","/app.jar"]
  • 12. DOCKERFILE FROM nginx COPY nginx.conf /etc/nginx/nginx.conf ENV NGINX_HOST foobar.com ENV NGINX_PORT 80 EXPOSE 80 CMD nginx”, “-g”, “’daemon off;’”]
  • 13. DOCKERFILE FROM dockerfile/ubuntu RUN add-apt-repository -y ppa:nginx/stable && apt-get update && apt-get install -y nginx && rm -rf /var/lib/apt/lists/* && echo "ndaemon off;" >> /etc/nginx/nginx.conf && chown -R www-data:www-data /var/lib/nginx VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"] WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443
  • 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
  • 16. DOCKER-COMPOSE version: '2’ services: elasticsearch: build: ./elastic environment: - ES_HEAP_SIZE=4g command: elasticsearch -Des.network.host=0.0.0.0 ports: - "9200:9200” - "9300:9300” volumes: - ./elastic/esdata:/usr/share/elasticsearch/data pdfindexer: build: ./indexserver ports: - "8080:8080” depends_on: - elasticsearch volumes: - ./indexserver/pdf-files:/pdf-files:ro
  • 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
  • 21. OSX TESTAILUA: VALMISTELU docker-machine create --driver virtualbox manager1 docker-machine create --driver virtualbox worker1 docker-machine create --driver virtualbox worker2 https://github.com/docker/labs/tree/master/swarm-mode/beginner-tutorial
  • 22. OSX TESTAILUA: SWARM LUONTI docker-machine ssh manager1 "docker swarm init --listen-addr $(docker- machine ip manager1) --advertise-addr $(docker-machine ip manager1)” export worker_token=`docker-machine ssh manager1 "docker swarm join-token worker -q"` docker-machine ssh worker1 "docker swarm join --token $worker_token -- listen-addr $(docker-machine ip worker1) --advertise-addr $(docker-machine ip worker1) $(docker-machine ip manager1):2377" docker-machine ssh worker2 "docker swarm join --token $worker_token -- listen-addr $(docker-machine ip worker2) --advertise-addr $(docker-machine ip worker2) $(docker-machine ip manager1):2377"
  • 23. OSX TESTAILUA: KÄYTTÖ docker-machine ssh manager1 docker node ls docker-machine ssh worker1 docker swarm leave docker-machine ssh worker2 docker swarm leave docker-machine ssh manager1 docker swarm leave --force
  • 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
  • 27. DOCKER MONITOROINTI › Dockerin omat kilkkeet • docker logs, docker ps, docker inspect, docker stats • echo -e "GET /containers/[CONTAINER_NAME]/stats HTTP/1.0rn" | nc -U /var/run/docker.sock › CAdvisor, Prometheus, Sensu, Logz.io › Scout, Data Dog, Sysdig, New Relic, Dynatrace, SignalFx
  • 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
  • 33. KIITOS! › Palautetta, lisää näkökantoja? https://github.com/crystoll/kontitpomppimaan