kontit pomppimaan3
TRANSCRIPT
![Page 2: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/2.jpg)
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?
![Page 3: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/3.jpg)
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
![Page 4: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/4.jpg)
MITÄ KAIKKEE?
![Page 5: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/5.jpg)
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
![Page 6: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/6.jpg)
MUT HEI, MIKSEI VAGRANT+ANSIBLE?
![Page 7: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/7.jpg)
DOCKER KÄYTTÖÖNOTTO› Docker Toolbox› Docker for Mac› Docker for Windows
› Tai ihan vaan tuttavallisesti: • brew cask install docker
![Page 8: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/8.jpg)
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”
![Page 9: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/9.jpg)
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
![Page 10: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/10.jpg)
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ä
![Page 11: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/11.jpg)
DOCKERFILEFROM openjdk:8VOLUME /tmpADD target/indexserver.jar app.jarRUN sh -c 'touch /app.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=docker","-Xmx1024m","-jar","/app.jar"]
![Page 12: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/12.jpg)
DOCKERFILEFROM nginxCOPY nginx.conf /etc/nginx/nginx.conf
ENV NGINX_HOST foobar.comENV NGINX_PORT 80
EXPOSE 80
CMD nginx”, “-g”, “’daemon off;’”]
![Page 13: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/13.jpg)
DOCKERFILEFROM dockerfile/ubuntuRUN \ 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/nginxVOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]WORKDIR /etc/nginxCMD ["nginx"]EXPOSE 80 EXPOSE 443
![Page 14: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/14.jpg)
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
![Page 15: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/15.jpg)
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
![Page 16: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/16.jpg)
DOCKER-COMPOSEversion: '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
![Page 17: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/17.jpg)
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/
![Page 18: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/18.jpg)
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/
![Page 19: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/19.jpg)
SWARM MODE: ACTIVE
![Page 20: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/20.jpg)
DOCKER SWARM› Swarm muodostuu virtuaalikoneiden klusterista, ainakin
yksi manager node ja yksi tai useampi worker node• Paikallisessa sandboxissa helpointa testata docker-machine
virtuaalikoneilla
![Page 21: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/21.jpg)
OSX TESTAILUA: VALMISTELUdocker-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
![Page 22: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/22.jpg)
OSX TESTAILUA: SWARM LUONTIdocker-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"
![Page 23: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/23.jpg)
OSX TESTAILUA: KÄYTTÖ
docker-machine ssh manager1 docker node ls
docker-machine ssh worker1 docker swarm leavedocker-machine ssh worker2 docker swarm leavedocker-machine ssh manager1 docker swarm leave --force
![Page 24: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/24.jpg)
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
![Page 25: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/25.jpg)
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
![Page 26: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/26.jpg)
OPENSHIFT CLOUDFORMS
![Page 27: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/27.jpg)
DOCKER MONITOROINTI› Dockerin omat kilkkeet
• docker logs, docker ps, docker inspect, docker stats• echo -e "GET /containers/[CONTAINER_NAME]/stats
HTTP/1.0\r\n" | nc -U /var/run/docker.sock
› CAdvisor, Prometheus, Sensu, Logz.io› Scout, Data Dog, Sysdig, New Relic, Dynatrace, SignalFx
![Page 28: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/28.jpg)
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
![Page 29: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/29.jpg)
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.driver.amd64-linux/Docker.qcow2 /LargeDrive/Docker/Docker.qcow2
• ln -s /LargeDrive/Docker/Docker.qcow2 ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
![Page 30: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/30.jpg)
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.driver.amd64-linux/Docker.qcow2
• Start Docker via Finder
![Page 31: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/31.jpg)
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)
![Page 32: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/32.jpg)
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
![Page 33: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/33.jpg)
KIITOS!› Palautetta, lisää näkökantoja?
https://github.com/crystoll/kontitpomppimaan
![Page 34: Kontit pomppimaan3](https://reader036.vdocuments.site/reader036/viewer/2022062522/58891f861a28ab77528b50bf/html5/thumbnails/34.jpg)