# Présentation Docker
---
[TOC]
---
## Table des matières :
- Conteneurisation vs VM
- Les images Docker (et les layers)
- Différences images et conteneurs
- docker-compose.yml et dockerfile
---
## Conteneurisation vs VM

<!-- https://reactic.io/blog/technologie-de-virtualisation/docker/avantages-docker.php -->
Note:
la conteneurisation consiste à mettre une application ainsi que l'envirommement adapté à celle-ci dans une boite afin de les isoler du système sans pour autant devoir créer une machine virtuelle à part entière, ce qui limite l'usage de ressources systèmes inutiles étant donné que ce sont les services du système hôte qui sont utilisées et partagées avec les conteneurs, le système hôte n'a donc pas besoin de simuler de hardware tout en isolant les applications. Plus efficace.
Nous avons ici un shémas représentant la hiérarchie entre docker en l'os.
---
### En résumé :
* <span>Partage du noyau du système hôte avec chaque conteneur<!-- .element: class="fragment" data-fragment-index="1" --></span>
* <span>Environnement adapté, on peut se concentre sur le développement plutôt que sur les problèmes de compatibilité<!-- .element: class="fragment" data-fragment-index="2" --></span>
* <span>Déploiement rapide<!-- .element: class="fragment" data-fragment-index="3" --></span>
* <span>Application isolées du système hôte (comme sur une vm)<!-- .element: class="fragment" data-fragment-index="4" --></span>
Note:
En résumé :
---
## Les images docker (et les layers)
* Système de couches (système de fichiers comparables à git)
* Images réutilisables
---

<!-- https://static.packt-cdn.com/products/9781788992329/graphics/0ee3d4cf-2133-4143-a7c4-690274483841.png -->
Note:
Les conteneurs docker fonctionnent avec un système de couches comparable à celui que l'on trouve dans git. Le système de fichiers des conteneurs docker est nommé OverlayFS. C'est un système de fichiers basé les différences qu'il y a entre les différentes couches, cela permet d'éviter de réutiliser plusieurs fois une même image de base stockée une seule fois en local.
Les images sont réutilisable pour plusieurs instances différentes du moment qu'elles partagent la même image en leur sein.
L'image finale est le construite à partir des couches d'images sous-jacentes
Prenons on exemple :
Vous avec une image ubuntu, vous rajoutez (installez) un service dessus (par exemple nodejs), votre image sera constituée de deux couches, une couche de base d'ubuntu, et une couche nodejs, docker fera la distinction entre ces couches et si après vous construisez une autre image avec ubuntu et apache, docker va, lors de la création du container, réutiliser l'image ubuntu déjà téléchargée et va rajouter apache par dessus, il n'aura donc pas besoin de retélécharger quoi que ce soit (si ce n'est apache dans la nouvelle image docker-apache fraichement construite)
---
## Différences Images et conteneurs
Un conteneur est l'instance d'une image docker.
Note:
Un conteneur est l'instance d'une image docker. Il peut être instancié avec des arguments est orchestré avec d'autre conteneurs (docker-compose)
---
## Docker-compose et dockerfile
---
### Dockerfile :
* Conçu pour construire une image
* Docker s'utilise pour construire une image alors que docker-compose permet de lancer l'image avec des arguments.
---
### Docker-compose sert à :
* Sauver les arguments nécessaires au lancement d'un ou plusieurs conteneurs
* Créer automatiquement le réseau interne de ses conteneurs
* Spécifier les points de montage des volumes des conteneurs
* Orchestrer les containers
Note:
Le dockerfile sert uniquement à construire une image unique alors que le docker-compose est un "orchestrateur de conteneurs", il permet donc de non seulement créer automatiquement un réseau interne des conteneurs qu'il gère, mais également spécifier les points de montage des volumes, choisir s'il s'agit de volume de type "volume" ou "bind mount". Il permet également de spécifier des arguments dans le fichier docker-compose.yml pour éviter de devoir les taper à chaque fois que l'on doit lancer le conteneur ; un seul "docker-compose up" et c'est parti !
---
## Docker Hub
C'est le registre par défaut de toutes les images docker : source par défaut des `docker pull`.
---
## Commandes utiles
* `docker run`
* `docker container ls`
* `docker {container, volume, image, network} ls`
* `docker exec -it`
* `docker logs [-f] <imageName>`
---
* `docker inspect <containerName>`
* `docker system prune`
* `docker stats`
* `docker pull`
* `docker-compose {up, down}`
---
## Démo
## Travaux pratiques
On va faire une image docker du jeu de la vie
https://codepen.io/RBSpatz/pen/rLyNLb
Liens utiles :
https://docs.docker.com/engine/reference/builder/
https://docs.docker.com/compose/compose-file/
TO DO : ajouter tuto travaux pratiques
?print-pdf#/
bind mount = volume au chemin spécifié
volume = volume dans var/lib/docker
{"metaMigratedAt":"2023-06-15T06:37:31.754Z","metaMigratedFrom":"YAML","title":"Présentation Docker","breaks":true,"contributors":"[{\"id\":\"15e97034-fba0-4fd9-a32d-9c5eb1dd654d\",\"add\":14796,\"del\":9559}]"}