Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
technique:tech_team:pres_compose [2021/10/16 20:04] – créée qduchemi | technique:tech_team:pres_compose [2021/11/15 23:19] – qduchemi | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
## C'est quoi Docker Compose ? | ## C'est quoi Docker Compose ? | ||
- | On l'a vu, Docker est assez simple | + | Docker |
- | Cependant, sur une activité d' | + | ### Mais pourquoi diable un énième outil ? |
- | Or, la configuration des volumes, des ports, des réseaux, etc, se fait au démarrage de chaque conteneur et n'est pas référencé dans l' | + | < |
- | Ceci veut dire qu'à chaque démarrage de conteneur, il faudrait écrire des commandes | + | Pour comprendre pourquoi on utilise un outil supplémentaire, il est utile de revenir [[technique: |
- | ```bash | + | ``` |
- | docker run -v < | + | docker run -d --name quentin |
``` | ``` | ||
- | C' | + | C' |
- | C' | + | Et c' |
- | Compose se base sur des fichiers écrits au format `YAML`, qui décrivent **comment** lancer les différents conteneurs. | + | C'est génial, parce que le fichier de configuration peut être versionné |
- | Pour donner une intuition, voici un fichier `docker-compose.yml` fictif qui vise à faciliter l' | + | ### Cas d'usage de Compose |
- | ```yaml | + | Compose est particulièrement indiqué pour les applications avec plusieurs conteneurs. Par exemple, Mattermost n'est pas un seul conteneur |
- | version: '3.7' | + | |
- | volumes: | + | Compose est aussi très utile pour déclarer des volumes |
- | db: | + | |
- | networks: | + | Enfin, toutes les commandes Compose permettent de vérifier les journaux d'une application, |
- | app: | + | |
- | + | ||
- | services: | + | |
- | app: | + | |
- | image: mattermost_app | + | |
- | depends_on: mattermost_db | + | |
- | ports: | + | |
- | - 80:8080 | + | |
- | networks: | + | |
- | - app | + | |
- | environment: | + | |
- | ADMIN_PASSWORD: | + | |
- | + | ||
- | db: | + | |
- | image: postgres | + | |
- | networks: | + | |
- | - app | + | |
- | environment: | + | |
- | POSTGRES_PASSWORD: | + | |
- | volumes: | + | |
- | - db:/ | + | |
- | ``` | + | |
- | Sans comprendre tous les éléments de syntaxe, on comprend que : | + | ### Un détour par le format YAML |
- | * `app` utilise l' | + | Les fichiers de configuration de Docker Compose sont au format |
- | * `db` utilise l'image `postgres`, | + | |
- | < | + | ```yaml |
- | ```bash | + | artists: |
- | docker-compose up | + | |
+ | year: 1992 | ||
+ | albums: | ||
+ | - ... | ||
+ | - title: Mansfield.TYA | ||
+ | year: 2002 | ||
+ | |||
+ | theaters: | ||
+ | maroquinerie: | ||
+ | title: La maroquinerie | ||
+ | trianon: | ||
+ | title: Le Trianon | ||
``` | ``` | ||
+ | |||
+ | On voit qu'il y a deux « blocs » de premier niveau, et qu'à chaque décalage on décrit quelque chose de plus précis. Ce qu'il y avant un `:` s' | ||
+ | |||
+ | < | ||
+ | Il y a une différence subtile entre les artistes et les salles. Les artistes sont listés avec des `-` alors que les salles n'ont pas de tiret. Pourquoi ? | ||
+ | |||
+ | C'est juste une histoire de nommage. Les artistes ne sont pas nommés, c'est simplement une liste. Ainsi, on pourrait dire « le premier artiste de `artists` », mais on ne peut pas le désigner directement. | ||
+ | Les salles sont nommées, on peut s'y référer directement, | ||
+ | |||
+ | En YAML, quand on a pas besoin de se référer explicitement à des sous-éléments, | ||
</ | </ | ||
+ | ### vim : un goût amer mais bien utile | ||
+ | |||
+ | La dernière fois, on a vu comment éditer un fichier avec `nano`. `nano` est bien pratique pour faire des petites modifications, | ||
+ | |||
+ | Je te propose donc de découvrir `vim`, un éditeur plus difficile à prendre en main mais très pratique pour éditer des fichiers YAML! | ||
+ | |||
+ | On va faire au plus simple : tu ouvres ton fichier `docker-compose.yml` avec `vim` : | ||
+ | |||
+ | ``` | ||
+ | vim docker-compose.yml | ||
+ | ``` | ||
+ | |||
+ | Tu appuies sur `I` pour rentrer en mode " | ||
+ | |||
+ | Enfin, tu appuies sur `:` pour rentrer en mode « commande », tu écris « wq » (_write_ and _quit_), puis `Entrée`. Et _voilà_ ! Ça peut paraître contre-intuitif parce qu'on ne rentre pas dans le pourquoi du comment, mais c'est tout ce que tu as besoin de savoir. Démonstration : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Note comment la barre du bas change au fil des commandes (`I` puis `:wq`). |