From a090596455e3b43ecfa3a7cd435defa74fae7eb0 Mon Sep 17 00:00:00 2001 From: 0h My Goat Date: Thu, 9 Nov 2023 16:29:45 +0100 Subject: [PATCH] feat: chapitre 6 :sparkles: --- Espace Formateur | 2 +- cours/00_index.slides.md | 17 ++ cours/06_Docker-Compose.md | 368 +++++++++++++++++++++++++++++++++++++ docs/README.md | 2 +- docs/REDACTION.md | 2 +- index.md | 12 -- 6 files changed, 388 insertions(+), 15 deletions(-) create mode 100644 cours/00_index.slides.md delete mode 100644 index.md diff --git a/Espace Formateur b/Espace Formateur index 7d93a87..e5ffe11 160000 --- a/Espace Formateur +++ b/Espace Formateur @@ -1 +1 @@ -Subproject commit 7d93a878228c74c062ff1d8ee829942e353fb272 +Subproject commit e5ffe1110e04c18afd64b6835979aff30a6eb9bb diff --git a/cours/00_index.slides.md b/cours/00_index.slides.md new file mode 100644 index 0000000..fcafac4 --- /dev/null +++ b/cours/00_index.slides.md @@ -0,0 +1,17 @@ +--- +title: Template +theme: solarized +author: Alexandre Devos +company: Octocorn +contributors: + - Alexandre Devos +--- + +# Index + +- [Présentation](01_Presentation.slides.md) +- [Premiers pas](02_Premiers_pas.slides.md) +- [Images et Conteneurs](03_Images_et_conteneurs.slides.md) +- [Volumes et Networks](04_Volumes_et_Networks.slides.md) +- [Dockerfile](05_Dockerfile.slides.md) +- [Docker Compose](06_Docker-Compose.md) \ No newline at end of file diff --git a/cours/06_Docker-Compose.md b/cours/06_Docker-Compose.md index e69de29..444c16b 100644 --- a/cours/06_Docker-Compose.md +++ b/cours/06_Docker-Compose.md @@ -0,0 +1,368 @@ +--- +title: Docker - Docker Compose +author: Alexandre Devos +company: Octocorn +contributors: + - Alexandre Devos +sources: + - +--- + +# Docker Compose + +![Docker logo](assets/docker-logo.png) + +---- + +## Docker Compose +### Présentation + +- Il est rare que tout le contenu d'une app (font, back, bdd, ...) soit dans un seul conteneur. +- Il est donc nécessaire de pouvoir lancer plusieurs conteneurs en même temps. + +---- + +## Docker Compose +### Admettons... + +Si je devais lancer une app web n tiers classique, je devrais : +- Lancer un conteneur pour la base de données +- Lancer un conteneur pour le back +- Lancer un conteneur pour le front +- Créer les images de chacun de ces conteneurs +- Créer des volumes de persistence +- Créer un network et le lier à tous les conteneurs +- Et tout refaire à chaque mise à jour ! + +---- + +## Docker Compose +### Un fichier pour les gouverner tous + +- Docker Compose permet de faire tout ça en une seule commande ! +- Ce fichier est nommé `docker-compose.yml`, écrit en [YAML](https://fr.wikipedia.org/wiki/YAML). +- Il peut être partagé, inséré dans un dépôt git, etc. + +--- + +# YAML + +![Docker logo](assets/docker-logo.png) + +---- + +## YAML +### Présentation + +- **Y**et **A**nother **M**arkup **L**anguage +- Format .yaml ou .yml +- Format de données textuelles, comparable au JSON +- Utilisé pour la configuration de nombreux outils (Ansible, Docker, Kubernetes, etc.) + +---- + +## YAML +### Présentation + +- Il s'agit d'un langage de **sérialisation** +- Il sert à stocker des données brutes de manière structurée +- Fonctionne avec des **clés** et des **valeurs** +- Utilise l'indentation pour structurer les données + +---- + +## YAML +### Exemple + +```yaml +formation: + titre: Docker + duree: 2 jours + niveau: débutant +author: + nom: Alexandre Devos + societe: Octocorn + stack: + - Ecosystème Java + - Ecosystème Javascript + - DevOps +``` + +---- + +## YAML +### Equivalent JSON + +```json +{ + "formation": { + "titre": "Docker", + "duree": "2 jours", + "niveau": "débutant" + }, + "author": { + "nom": "Alexandre Devos", + "societe": "Octocorn", + "stack": [ + "Ecosystème Java", + "Ecosystème Javascript", + "DevOps" + ] + } +} +``` + +---- + +## YAML +### Types de données + +- Les types d'objets primaires (int, str, float, bool etc.) +- Beaucoup de types de données (tableaux, listes ...) +- Pris en charge par le JavaScript, Python, Ruby, Java ... + +> Il n'est pas destiné à remplacer le JSON, chacun ayant ses avantages. + +---- + +## YAML +### Tips + +> Si votre conteneur ne build pas : vérifiez votre indentation ! + +--- + +# Docker Compose + +![Docker logo](assets/docker-logo.png) + +---- + +## Docker Compose +### Fonctionnement + +- L'utilisateur écrit un fichier `docker-compose.yml` +- Il tape la commande `docker-compose up` +- Docker compose va : + - Lire le fichier `docker-compose.yml` + - Créer les conteneurs + - Créer les volumes + - Créer le network + - Lancer les conteneurs +- L'utilisateur peut accéder à l'application + +---- + +## Docker Compose +### Attributs + +- Si on peut mettre 'ce que l'on veut' dans un fichier YAML, il faut tout de même respecter une structure. +- Concernant Docker Compose, il y a des attributs obligatoires et d'autres facultatifs. +- Il existe **beaucoup** d'attributs, nous n'en verrons que quelques uns. + +> Liste complète [ici](https://github.com/compose-spec/compose-spec/blob/master/spec.md) + +---- + +## Docker Compose +### Structure basique + +```yaml +## Version de docker-compose +version: "3.9" + +services: ## Obligatoire : liste des services. + permierService: ## Nom du service (conteneur) + ## Obligatoire : image de base. Equivbalent du FROM + image: nginx:latest + ports: ## Ports à exposer, comme pour le -p de docker run + - 8080:80 + volumes: ## Volumes à monter. Même fonctionnement que docker run -v + - ./nginx.conf:/etc/nginx/nginx.conf + secondService: + ## ... + troisiemeService: + ## ... +``` + +> Attention à l'indentation ! + +---- + +## Docker Compose +### `version` + +- Indique la version de docker-compose utilisée +- La version 3.9 correspond à la version 19.03+ du moteur Docker + +> Voir la [doc](https://docs.docker.com/compose/compose-file/compose-versioning/) + +---- + +## Docker Compose +### `services` + +```yaml +services: + monservice: +``` + +- Liste des services (conteneurs) à créer +- Obligatoire +- Chaque service est un objet, avec ses propres attributs + +---- + +## Docker Compose +### `monservice` + +```yaml +services: + monservice: + attribut: + attribut: +``` + +- Il y a une indentation entre le nom du service et ses attributs +- Le nom du service est libre, mais il est conseillé de le nommer comme le conteneur qu'il va créer + +---- + +## Docker Compose +### `monservice.image` + +```yaml +services: + monservice: + image: nginx:latest +``` + +- Indique l'image de base du conteneur +- Equivalent du `FROM` d'un Dockerfile + +---- + +## Docker Compose +### `monservice.build` + +```yaml +services: + monservice: + build: ./chemin/vers/Dockerfile +``` + +- Indique le chemin vers le Dockerfile à utiliser +- Equivalent du `docker build` d'un Dockerfile +- Le fichier doit être présent dans le contexte courant + +---- + +## Docker Compose +### `monservice.contexte` + +```yaml +services: + monservice: + context: ./chemin/vers/contexte +``` + +- Indique le chemin vers le contexte à utiliser +- Permet de spécifier un contexte différent du répertoire courant +- Equivalent du `docker build -f ./chemin/vers/Dockerfile` d'un Dockerfile + +---- + +## Docker Compose +### `monservice.ports` + +```yaml +services: + monservice: + ports: + - 8080:80 +``` + +- Indique les ports à exposer +- Equivalent du `-p` de `docker run` +- Le premier port est celui de l'hôte, le second celui du conteneur + +---- + +## Docker Compose +### `monservice.volumes` : bind mount + +```yaml +services: + monservice: + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf +``` + +- Indique les volumes à monter +- Equivalent du `-v` de `docker run` +- Le premier chemin est celui de l'hôte, le second celui du conteneur + +---- + +## Docker Compose +### `monservice.volumes` : Volume Docker + +```yaml +services: + monservice: + volumes: + - nomVolume:/etc/nginx/nginx.conf +volumes: + nomVolume: +``` + +- Permets ici de monter un volume Docker +- Equivalent du `-v` de `docker run` +- Le volume doit être déclaré dans la section `volumes` + +---- + +## Docker Compose +### `monservice.depends_on` + +```yaml +services: + monservice: + depends_on: + - serviceA + - serviceB +``` + +- Indique les dépendances entre les services +- Le service démarrera après les services dont il dépend + +---- + +## Docker Compose +### `monservice.environment` + +```yaml +services: + monservice: + environment: + - PORT=8080 +``` + +- Indique les variables d'environnement à passer au conteneur +- Equivalent du `-e` de `docker run` + +> NB : beaucoup de conteneurs ont besoin de variable d'environnement ! + +---- + +## Docker Compose +### Démonstration + +Docker run VS docker compose + +---- + +## Docker Compose +### A vous de jouer ! + +Réalisez l'exercice 1 \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 09fda8a..764698c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,7 +22,7 @@ npm i -g reveal-md Pour visualiser les slides, il faut lancer la commande suivante : ```bash -reveal-md index.md +reveal-md 00_index.slides.md ``` ### Générer un site statique diff --git a/docs/REDACTION.md b/docs/REDACTION.md index a4aec0e..3cadafe 100644 --- a/docs/REDACTION.md +++ b/docs/REDACTION.md @@ -4,7 +4,7 @@ ```bash root -| index.md # Table des matières +| 00_index.slides.md # Table des matières | exercices # Répertoire contenant les exercices | | 01_exercice # Répertoire contenant l'exercice 01 | | | 01_exercice.poussin.md diff --git a/index.md b/index.md deleted file mode 100644 index da4cccb..0000000 --- a/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Template -theme: solarized -author: Alexandre Devos -company: Octocorn -contributors: - - Alexandre Devos ---- - -# Index - -- [Présentation](./cours/01_Presentation.slides.md) \ No newline at end of file