Des containers de la cale au pont · 2015-11-05 · Des processus avec des guirlandes::...
Transcript of Des containers de la cale au pont · 2015-11-05 · Des processus avec des guirlandes::...
:: @CNRSDes containers de la cale au pont
Nicolas MULLER
13 ans de BTPMembre MARSJUGMembre LAB-AIXpérimentation
Plan de la soirée
● Once upon a time...● Installation + distribution● Interconnexion de containers● Live demos
○ Tomcat dream architecture○ Docker compose○ Docker machine
● Feedback
Docker :: Qui a déjà joué avec ?
About Docker
● Fondé en 2009● Précédemment DotCloud● Docker in 2015● Deux levées de fonds
Pourquoi Docker ?
● L’industrie logiciel a changé● Fin des grosses applications monolithiques● Micro-services● Processus de déploiement
Key Rules
● Design based on Unix principles for composability and simplicity
● Emphase the ecosystem
● Do what’s best for user
Un problème toujours vrai en 2015
La matrice de l’enfer
Logistique
Architecture
● Docker engine● Docker client● Architecture REST● Protocole HTTP(s)
Ecrit en GO
Docker :: Containers
● Virtualisation d’environnement d’exécution○ Processeurs○ Mémoire vive○ Réseau○ Système de fichiers
● Contraire de la virtualisation de machine
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
And the winner is...
Great isolation but overhead
Less isolation but less overhead
Conclusion
What does it hide ?
Technologies sous-jacentes
● CHROOT● LXC● CGROUPS● Namespace
Previously :: JAILS / DZONE
Docker vs OpenVZ
● Architecture○ Docker sees a container as a application/service○ OpenVZ sees a container as a VPS
● OpenVZ ○ Template for empty linux machine○ Patched linux kernel○ SSH
Des processus avec des guirlandes
:: installation
Installation dev
● Linux native
● Docker Toolbox○ Windows + Mac○ Toute petite VM (25 Mo)
Installation production
● Linux classique○ debian○ ubuntu○ centos
● Distribution dédiée○ Projet Atomic○ CoreOS○ Rancher OS
:: Images
Programmation Orientée objet
● Les images sont des classes● Les containers sont les objets
● La couche reprend le concept d’héritage
Qu’est ce qu’une image ?
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 seule● Un container est un ensemble de processus tournant
dans un système de fichier en lecture/écriture● Docker utilise le principe du COW pour démarrer très
vite les containers
:: Dockerfile
Dockerfile exemple
Liste des commandes
● FROM● MAINTENER● RUN● CMD● EXPOSE● ADD● COPY
● ENTRYPOINT● VOLUME● USER● WORKDIR● ONBUILD● ENV
Builder son image
Pour builder l’image● docker build -t demojug/tomcat .
Pour lancer un container à partir de l’image● docker run -d demojug/tomcat● docker run -it demojug/tomcat bash
Best practices
● Eviter d’installer trop de chose● Au mieux un processus par container● Minimiser le nombre de couches● Utiliser .dockerignore● Depuis peu, utilisez les LABEL● NO UPGRADE / NO BOOT INIT● DIVISEZ POUR REGNER● Utilisez vos propres images !
:: Commands
Liste des images
Recherche des images
Quelques commandes● docker run -d jpetazzo/clock● docker ps● docker ps -lq ● docker logs --tail 3 <containerId>● docker logs --tail 1 --follow <containerId>● docker kill $(docker ps -a -q)● docker rmi $(docker images -q)
Télécharger des images
Explicitement : docker pull
Implicitement : docker run
:: volumes
:: network
Isolation by designeach container runs isolated
Container WEB Container DB
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
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
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
Mapping de ports
Container WEB Container ‘db’
TOMCAT 8080 MYSQL 3306
Bridge docker0
HôteIP_INTERFACE
Réseau externe
docker run … -p 80:8080
Options :: réseau
docker run … -- net = bridgedocker run … -- net = hostdocker run … -- net = CONTAINER_IDdocker run … -- net = none
:: Cycle de vie
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
Système de cache
● RUN apt-get install -y curl wget● RUN apt-get install -y wget curl
● RUN apt-get update● ADD / COPY
docker build --no-cache ...
:: plus loin
Docker :: everywhere
Windows ServerContainer Support
Docker Engine
Linux ContainerSupport (LXC)
Docker Engine
Windows Server Linux
Docker Client
Chrome in Docker
https://github.com/jpetazzo/dind
Dev / Test
● Utiliser une CI pour construire les images● Utiliser les containers pour
○ Jouer les tests unitaires○ Recréer l’environnement d’intégration pour les tests
● Bénéfices○ Avoir la garantie d’un environnement propre
à chaque lancement des tests○ Avoir la possibilité de jouer toute l’intégration dans
un seul container
:: limites
Limites :: production
Images buildingGarbage collectionLoggingFilesystemsSecurityImage layer and transportation
:: ComposeMulti-container application into a single file
Where to use it ?
docker-compose [command] --help
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
Commands
● up with daemon
● stop / start
● logs
:: Tomcat
Images Tomcat
https://registry.hub.docker.com/search?q=tomcat&searchfield=
https://github.com/rossbachp/dockerbox/tree/master/docker-images/tomcat8
:: Machine
Créer une machine locale
Commandes
:: Swarm
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
:: RancherOS
Merci