Ajout des explications du docker-compose.yml
This commit is contained in:
parent
73ded03618
commit
8ff80f6e8a
99
explications_dockercompose.md
Normal file
99
explications_dockercompose.md
Normal file
@ -0,0 +1,99 @@
|
||||
#Fichier `docker-compose.yml`
|
||||
##Syntaxe
|
||||
#Structure
|
||||
```
|
||||
services :
|
||||
nomA:
|
||||
...
|
||||
...:
|
||||
- ...
|
||||
(définition du serveur)
|
||||
|
||||
nomB:
|
||||
...
|
||||
...:
|
||||
- ...
|
||||
(définition du serveur)
|
||||
|
||||
volumes :
|
||||
vol1 : ...
|
||||
vol2 : ...
|
||||
|
||||
networks :
|
||||
net1 : ...
|
||||
net2 : ...
|
||||
```
|
||||
> /!\ Ce ne sont pas des indentations mais des doubles espaces
|
||||
|
||||
#Définition des services
|
||||
On définit les services dans la partie `services`. On commence par le nom qu'on veut donner au service, puis on le définit.
|
||||
```
|
||||
services:
|
||||
php:
|
||||
image: windok/php-redis
|
||||
restart: always
|
||||
volumes:
|
||||
- ./web:/usr/share/nginx/html
|
||||
environment:
|
||||
- NOM : "moguljak"
|
||||
- PRENOM : "tom"
|
||||
deploy:
|
||||
replicas: 2
|
||||
networks:
|
||||
- front
|
||||
- back
|
||||
```
|
||||
|
||||
`image: ...` sert à définir l'image utilisée. On les trouve sur le site [Docker Hub](https://hub.docker.com/). Il faut pivilégier les images officielles, signalées par un badge vert avec une étoile.
|
||||
Pour utiliser une image faite grâce à un dockerfile, ????
|
||||
|
||||
`ports: ...` est suivi de la liste (avec tirets) des ports que l'on souhaite exposer. En général, si l'énoncé dit d'exposer le port 1234, il faut noter `1234:1234`. Le nombre à gauche désigne le port sur la machine, et celui à droite, le port sur la VM. Si le port n'est pas donné (pour cAdvisor, Grafana et autres, par exemple), il est disponible en ligne.
|
||||
|
||||
`volumes: ...` est suivi de la liste des volumes que l'on souhaite monter dans la VM. Chaque ligne est au format `path-machine:path-VM`, c'est à dire que s'il on demande de partager le dossier web (présent sur la machine) dans /usr/share/nginx/html, on écrira `- ./web:/usr/share/nginx/html`. Si le volume est un des volumes sont définis dans la partie `volumes` extérieure à la partie `services` (voir plus loin), on remplace le path dans la machine par le nom donné au volume.
|
||||
|
||||
`networks: ...` est suivi de la liste des réseaux auxquels on veut que ce servce aie accès. Si on utilise des exporters (cAdvisor, node-exporter...), tous les services devront avoir au moins un réseau en commun avec l'exporter. Les réseaux sont définis dans la partie `networks` extérieure à la partie `services` (voir plus loin)
|
||||
|
||||
`environment: ...` est suivi de la liste des variables d'environnement qu'on veut créer dans ce service. Chaque ligne est au format `nom:valeur`.
|
||||
|
||||
> Les éléments dits "suivi d'une liste" doivent toujopurs être suivis de listes à tirets, même s'il n'y a qu'un seul élément.
|
||||
|
||||
`restart: always` indique que le restart est continu.
|
||||
|
||||
Pour déployer plusieurs instances d'un même service, on utilise :
|
||||
```
|
||||
deploy:
|
||||
replicas: 2
|
||||
```
|
||||
|
||||
#Définition des réseaux
|
||||
On définit les réseaux dans la partie `networks`. Elle est différente de la partie networks à l'intérieur de la définition d'un service, et n'est pas identée.
|
||||
```
|
||||
networks:
|
||||
front:
|
||||
back:
|
||||
```
|
||||
On donne le nom puis la définition du réseau. Ici, pas besoin de définition
|
||||
|
||||
#Définition des volumes
|
||||
On définit les volumes dans la partie `volumes`. Elle est différente de la partie volumes à l'intérieur de la définition d'un service, et n'est pas identée.
|
||||
```
|
||||
volumes:
|
||||
redis_data:
|
||||
redisinsight_data:
|
||||
```
|
||||
On donne le nom puis la définition du réseau. Ici, pas besoin de définition car le volume est vide. On peut aussi ajouter {} après les : pour signifier que la volume est vide
|
||||
|
||||
##Utilisation
|
||||
On lance le fichier avec `docker compose up -d` (pas de tiret entre docker et compose !!!). Le `-d` sert a lancé l'activité en arrière-plan et donc à pouvoir utiliser le terminal.
|
||||
Si le fichier utiliise un autre nom que `docker-compose.yml`, on utilise `docker compose -f nom-fichier.yml up -d`
|
||||
|
||||
Pour savoir si le docker compose a fonctionné, on vérifie que la commande `docker compose up` n'a pas fait d'erreur. On lance la commande `docker ps` et on vérifie que la nouvelle VM est affichée.
|
||||
|
||||
Pou se connecter à un conteneur (ici `php` du dossier `tp4`), on fait `docker exec -it tp4-php-1`
|
||||
- `tp4` est le nom du dossier
|
||||
- `php` est le nom du conteneur
|
||||
- on met le nombre même si on n'a créé qu'un seul conteneur avec ce nom
|
||||
|
||||
Pour vérfier les réseaux présents, on fait `docker inspect`. Pour vérifier les réseaux présents dans un conteneur en particulier, on ajoute le nom du conteneur à la fin de la commande en suivant la grammaire dossier-fichier-numéro.
|
||||
|
||||
Pour supprimer tous les conteneurs, on fait `docker compose down`.
|
Loading…
Reference in New Issue
Block a user