docker - yajug
TRANSCRIPT
![Page 1: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/1.jpg)
:: @YaJUGDes containers de la cale au pont
![Page 2: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/2.jpg)
Nicolas MULLER13 ans de BTPMembre MARSJUGMembre LAB-AIXpérimentation
![Page 3: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/3.jpg)
Plan de la soiréeOnce upon a time...Installation + distributionInterconnexion de containersLive demos
Tomcat dream architectureDocker composeDocker machine
Feedback
![Page 4: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/4.jpg)
Docker :: Qui a déjà joué avec ?
![Page 5: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/5.jpg)
About DockerFondé en 2009Précédemment DotCloudDocker in 2015Deux levées de fonds
![Page 6: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/6.jpg)
Pourquoi Docker ?L’industrie logiciel a changéFin des grosses applications monolithiquesMicro-servicesProcessus de déploiement
![Page 7: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/7.jpg)
Key RulesDesign based on Unix principles for
composability and simplicity
Emphase the ecosystem
Do what’s best for user
![Page 8: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/8.jpg)
Un problème toujours vrai en 2015
![Page 9: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/9.jpg)
La matrice de l’enfer
![Page 10: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/10.jpg)
Logistique
![Page 11: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/11.jpg)
![Page 12: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/12.jpg)
![Page 13: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/13.jpg)
![Page 14: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/14.jpg)
![Page 15: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/15.jpg)
ArchitectureDocker engineDocker clientArchitecture RESTProtocole HTTP(s)
Ecrit en GO
![Page 16: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/16.jpg)
Docker :: ContainersVirtualisation d’environnement d’exécution
ProcesseursMémoire viveRéseauSystème de fichiers
Contraire de la virtualisation de machine
![Page 17: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/18.jpg)
And the winner is...
Great isolation but overhead
Less isolation but less overhead
Conclusion
![Page 19: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/19.jpg)
What does it hide ?
![Page 20: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/20.jpg)
Technologies sous-jacentes
CHROOTLXCCGROUPSNamespace
![Page 21: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/21.jpg)
Previously :: JAILS / DZONE
![Page 22: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/23.jpg)
Des processus avec des guirlandes
![Page 24: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/24.jpg)
:: installation
![Page 25: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/25.jpg)
Installation devLinux native
Docker ToolboxWindows + MacToute petite VM (25 Mo)
![Page 26: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/26.jpg)
Installation productionLinux classique
debianubuntucentos
Distribution dédiéeProjet AtomicCoreOSRancher OS
![Page 27: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/27.jpg)
:: Images
![Page 28: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/29.jpg)
Qu’est ce qu’une image ?
![Page 30: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/31.jpg)
:: Dockerfile
![Page 32: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/32.jpg)
Dockerfile exemple
![Page 33: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/33.jpg)
Liste des commandesFROMMAINTENERRUNCMDEXPOSEADDCOPY
ENTRYPOINTVOLUMEUSERWORKDIRONBUILDENV
![Page 34: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/35.jpg)
![Page 36: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/37.jpg)
:: Commands
![Page 38: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/38.jpg)
![Page 39: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/39.jpg)
Liste des images
![Page 40: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/40.jpg)
Recherche des images
![Page 41: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/42.jpg)
Télécharger des images
Explicitement : docker pull
Implicitement : docker run
![Page 43: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/43.jpg)
:: volumes
![Page 44: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/44.jpg)
![Page 45: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/45.jpg)
:: network
![Page 46: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/46.jpg)
Isolation by designeach container runs isolated
Container WEB Container DB
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
![Page 47: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/50.jpg)
Options :: réseaudocker run … -- net = bridgedocker run … -- net = hostdocker run … -- net = CONTAINER_IDdocker run … -- net = none
![Page 51: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/51.jpg)
:: Cycle de vie
![Page 52: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/54.jpg)
:: plus loin
![Page 55: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/55.jpg)
Docker :: everywhere
Windows ServerContainer Support
Docker Engine
Linux ContainerSupport (LXC)
Docker Engine
Windows Server Linux
Docker Client
![Page 56: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/56.jpg)
Chrome in Docker
![Page 57: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/57.jpg)
https://github.com/jpetazzo/dind
![Page 58: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/59.jpg)
:: limites
![Page 60: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/60.jpg)
Limites :: productionImages buildingGarbage collectionLoggingFilesystemsSecurityImage layer and transportation
![Page 61: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/61.jpg)
:: ComposeMulti-container application into a single file
![Page 62: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/62.jpg)
Where to use it ?
![Page 63: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/63.jpg)
docker-compose [command] --help
![Page 64: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/64.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/65.jpg)
Commandsup with daemon
stop / start
logs
![Page 66: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/66.jpg)
:: Tomcat
![Page 67: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/67.jpg)
Images Tomcathttps://registry.hub.docker.com/search?q=tomcat&searchfield=
https://github.com/rossbachp/dockerbox/tree/master/docker-images/tomcat8
![Page 68: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/68.jpg)
![Page 69: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/69.jpg)
:: Machine
![Page 70: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/70.jpg)
Créer une machine locale
![Page 71: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/71.jpg)
Commandes
![Page 72: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/72.jpg)
:: Swarm
![Page 73: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/73.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/74.jpg)
:: RancherOS
![Page 75: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/75.jpg)
![Page 76: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/76.jpg)
![Page 77: Docker - YaJUG](https://reader036.vdocuments.net/reader036/viewer/2022062503/586fd8d61a28ab18428b572f/html5/thumbnails/77.jpg)
Merci