docker - yajug

77
:: @YaJUG Des containers de la cale au pont

Upload: nicolas-muller

Post on 16-Apr-2017

1.828 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Docker  - YaJUG

:: @YaJUGDes containers de la cale au pont

Page 2: Docker  - YaJUG

Nicolas MULLER13 ans de BTPMembre MARSJUGMembre LAB-AIXpérimentation

Page 3: Docker  - YaJUG

Plan de la soiréeOnce upon a time...Installation + distributionInterconnexion de containersLive demos

Tomcat dream architectureDocker composeDocker machine

Feedback

Page 4: Docker  - YaJUG

Docker :: Qui a déjà joué avec ?

Page 5: Docker  - YaJUG

About DockerFondé en 2009Précédemment DotCloudDocker in 2015Deux levées de fonds

Page 6: Docker  - YaJUG

Pourquoi Docker ?L’industrie logiciel a changéFin des grosses applications monolithiquesMicro-servicesProcessus de déploiement

Page 7: Docker  - YaJUG

Key RulesDesign based on Unix principles for

composability and simplicity

Emphase the ecosystem

Do what’s best for user

Page 8: Docker  - YaJUG

Un problème toujours vrai en 2015

Page 9: Docker  - YaJUG

La matrice de l’enfer

Page 10: Docker  - YaJUG

Logistique

Page 11: Docker  - YaJUG
Page 12: Docker  - YaJUG
Page 13: Docker  - YaJUG
Page 14: Docker  - YaJUG
Page 15: Docker  - YaJUG

ArchitectureDocker engineDocker clientArchitecture RESTProtocole HTTP(s)

Ecrit en GO

Page 16: Docker  - YaJUG

Docker :: ContainersVirtualisation d’environnement d’exécution

ProcesseursMémoire viveRéseauSystème de fichiers

Contraire de la virtualisation de machine

Page 17: Docker  - YaJUG

Full virtualization

Host hardware

Host OS

Hypervisor

Guest OS

virt.

App

1

App

2

App

3

App

1

App

2

App

3

Guest OS

virt.

VMDocker containers

Host hardware

Doc

ker E

ngin

e

App

1

App

2

App

3

App

4

App

5container

Comparaison

Kernel

Page 18: Docker  - YaJUG

And the winner is...

Great isolation but overhead

Less isolation but less overhead

Conclusion

Page 19: Docker  - YaJUG

What does it hide ?

Page 20: Docker  - YaJUG

Technologies sous-jacentes

CHROOTLXCCGROUPSNamespace

Nicolas Muller
CHROOT : an operation that changes the apparent root directory for the current running process and their children
Page 21: Docker  - YaJUG

Previously :: JAILS / DZONE

Page 22: Docker  - YaJUG

Docker vs OpenVZ

ArchitectureDocker sees a container as a application/serviceOpenVZ sees a container as a VPS

OpenVZ Template for empty linux machinePatched linux kernelSSH

Page 23: Docker  - YaJUG

Des processus avec des guirlandes

Page 24: Docker  - YaJUG

:: installation

Page 25: Docker  - YaJUG

Installation devLinux native

Docker ToolboxWindows + MacToute petite VM (25 Mo)

Page 26: Docker  - YaJUG

Installation productionLinux classique

debianubuntucentos

Distribution dédiéeProjet AtomicCoreOSRancher OS

Page 27: Docker  - YaJUG

:: Images

Page 28: Docker  - YaJUG

Programmation Orientée objet

Les images sont des classesLes containers sont les objets

La couche reprend le concept d’héritage

Page 29: Docker  - YaJUG

Qu’est ce qu’une image ?

Page 30: Docker  - YaJUG

Différences entre images et containers

Une image est créé :à partir d’un dockerfileà partir d’un commit d’un container

Une image est un système de fichier en lecture seuleUn container est un ensemble de processus tournant

dans un système de fichier en lecture/écritureDocker utilise le principe du COW pour démarrer très vite

les containers

Page 31: Docker  - YaJUG

:: Dockerfile

Page 32: Docker  - YaJUG

Dockerfile exemple

Page 33: Docker  - YaJUG

Liste des commandesFROMMAINTENERRUNCMDEXPOSEADDCOPY

ENTRYPOINTVOLUMEUSERWORKDIRONBUILDENV

Page 34: Docker  - YaJUG

Builder son imagePour builder l’image

docker build -t demojug/tomcat .

Pour lancer un container à partir de l’imagedocker run -d demojug/tomcatdocker run -it demojug/tomcat bash

Page 35: Docker  - YaJUG
Page 36: Docker  - YaJUG

Best practicesEviter d’installer trop de choseAu mieux un processus par containerMinimiser le nombre de couchesUtiliser .dockerignoreDepuis peu, utilisez les LABELNO UPGRADE / NO BOOT INITDIVISEZ POUR REGNERUtilisez vos propres images !

Page 37: Docker  - YaJUG

:: Commands

Page 38: Docker  - YaJUG
Page 39: Docker  - YaJUG

Liste des images

Page 40: Docker  - YaJUG

Recherche des images

Page 41: Docker  - YaJUG

Quelques commandesdocker run -d jpetazzo/clockdocker psdocker ps -lq docker logs --tail 3 <containerId>docker logs --tail 1 --follow <containerId>docker kill $(docker ps -a -q)docker rmi $(docker images -q)

Page 42: Docker  - YaJUG

Télécharger des images

Explicitement : docker pull

Implicitement : docker run

Page 43: Docker  - YaJUG

:: volumes

Page 44: Docker  - YaJUG
Page 45: Docker  - YaJUG

:: network

Page 46: Docker  - YaJUG

Isolation by designeach container runs isolated

Container WEB Container DB

TOMCAT 8080 MYSQL 3306

Bridge docker0

Hôte

Page 47: Docker  - YaJUG

Container WEB Container DB

TOMCAT 8080 MYSQL 3306

Bridge docker0

Hôte

8080 exposé 3306 exposé

+ Dockerfile : EXPOSE <port>+ docker run … p <port>

Exposition ports

Page 48: Docker  - YaJUG

Lien entre containers

Container WEB Container ‘db’

TOMCAT 8080 MYSQL 3306

Bridge docker0

Hôte

ENV VARIABLE

DBALIAS_PORTDBALIAS_ADDRDBALIAS_TCP

DBALIAS_PROTO…...

Exemple : Docker run … -link db:dbalias

LINK

Page 49: Docker  - YaJUG

Mapping de ports

Container WEB Container ‘db’

TOMCAT 8080 MYSQL 3306

Bridge docker0

HôteIP_INTERFACE

Réseau externe

docker run … -p 80:8080

Page 50: Docker  - YaJUG

Options :: réseaudocker run … -- net = bridgedocker run … -- net = hostdocker run … -- net = CONTAINER_IDdocker run … -- net = none

Page 51: Docker  - YaJUG

:: Cycle de vie

Page 52: Docker  - YaJUG

Host 2 OS

Docker EngineDocker Engine

Host 1 OS

Source code

repository Con

t A

Build

Push

SearchPull

Run

Dockerfile for A

Dockerimage

registry

Image A

CRÉATION, GESTION ET DEPLOIEMENT

Page 53: Docker  - YaJUG

Système de cache

RUN apt-get install -y curl wgetRUN apt-get install -y wget curl

RUN apt-get updateADD / COPY

docker build --no-cache ...

Page 54: Docker  - YaJUG

:: plus loin

Page 55: Docker  - YaJUG

Docker :: everywhere

Windows ServerContainer Support

Docker Engine

Linux ContainerSupport (LXC)

Docker Engine

Windows Server Linux

Docker Client

Page 56: Docker  - YaJUG

Chrome in Docker

Page 57: Docker  - YaJUG

https://github.com/jpetazzo/dind

Page 58: Docker  - YaJUG

Dev / TestUtiliser une CI pour construire les imagesUtiliser les containers pour

Jouer les tests unitairesRecréer l’environnement d’intégration pour les tests

BénéficesAvoir la garantie d’un environnement propre

à chaque lancement des testsAvoir la possibilité de jouer toute l’intégration dans un

seul container

Page 59: Docker  - YaJUG

:: limites

Page 60: Docker  - YaJUG

Limites :: productionImages buildingGarbage collectionLoggingFilesystemsSecurityImage layer and transportation

Page 61: Docker  - YaJUG

:: ComposeMulti-container application into a single file

Page 62: Docker  - YaJUG

Where to use it ?

Page 63: Docker  - YaJUG

docker-compose [command] --help

Page 64: Docker  - YaJUG

mysqldb: image: mysql:latest environment: MYSQL_USER: mysql MYSQL_PASSWORD: mysql MYSQL_DATABASE: petclinic MYSQL_ROOT_PASSWORD: supersecret volumes: - datadir:/var/lib/mysql

mytomcat: build: tomcat8 environment: CATALINA_OPTS: "-Xmx1024m" volumes: - webapps:/tomcat/webapps links: - mysqldb:webdb ports: - 8080:8080

docker-compose.yml

Page 65: Docker  - YaJUG

Commandsup with daemon

stop / start

logs

Page 66: Docker  - YaJUG

:: Tomcat

Page 68: Docker  - YaJUG
Page 69: Docker  - YaJUG

:: Machine

Page 70: Docker  - YaJUG

Créer une machine locale

Page 71: Docker  - YaJUG

Commandes

Page 72: Docker  - YaJUG

:: Swarm

Page 73: Docker  - YaJUG

Utiliser swarm avec machinedocker run swarm create5b7220ee08396d85d08dd9516946b226

docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://5b7220ee08396d85d08dd9516946b226 head

docker-machine create -d digitalocean --swarm --swarm-discovery token://31e61710169a7d3568502b0e9fb09d66 worker-00 docker-machine create -d azure --swarm --swarm-discovery token://31e61710169a7d3568502b0e9fb09d66 worker-01

$(docker-machine env --swarm head)

docker info

Page 74: Docker  - YaJUG

:: RancherOS

Page 75: Docker  - YaJUG
Page 76: Docker  - YaJUG
Page 77: Docker  - YaJUG

Merci