Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:tech_team:pres_compose [2021/10/17 03:23] – qduchemi | technique:tech_team:pres_compose [2021/11/16 00:42] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
## C'est quoi Docker Compose ? | ## C'est quoi Docker Compose ? | ||
+ | Docker Compose est un outil d' | ||
+ | ### Mais pourquoi diable un énième outil ? | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour comprendre pourquoi on utilise un outil supplémentaire, | ||
+ | |||
+ | ``` | ||
+ | docker run -d --name quentin -p 80:80 -v quentin:/ | ||
+ | ``` | ||
+ | |||
+ | C'est déjà long, et encore, il n'y a que quelques options. Imagine qu'à chaque mise à jour, il faille taper la même commande pour relancer le conteneur! C'est long et pénible, il y a des risques d' | ||
+ | |||
+ | Et c'est là qu' | ||
+ | |||
+ | C'est génial, parce que le fichier de configuration peut être versionné sur Git, partagé entre plusieurs machines et modifié collaborativement, | ||
+ | |||
+ | ### Cas d' | ||
+ | |||
+ | Compose est particulièrement indiqué pour les applications avec plusieurs conteneurs. Par exemple, Mattermost n'est pas un seul conteneur : c'est un serveur web et une base de données. Compose permet de décrire les dépendances entre ces conteneurs, et de les lancer d'un seul coup. | ||
+ | |||
+ | Compose est aussi très utile pour déclarer des volumes ou des réseaux Docker, dont on reparlera avec [[technique: | ||
+ | |||
+ | Enfin, toutes les commandes Compose permettent de vérifier les journaux d'une application, | ||
+ | |||
+ | ### Un détour par le format YAML | ||
+ | |||
+ | Les fichiers de configuration de Docker Compose sont au format `YAML`. C'est un format qui exprime la « hiérarchie » par des espaces. Un exemple simple où je veux décrire des groupes de musiques et des salles de concert : | ||
+ | |||
+ | ```yaml | ||
+ | artists: | ||
+ | - title: System of a Down | ||
+ | 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`). | ||
+ | |||
+ | On est maintenant équipé pour écrire des fichiers Compose sur les machines ! ^_^ | ||
+ | |||
+ | ### Ton premier fichier Compose | ||
+ | |||
+ | On va ré-écrire la première commande de cette page, mais à l'aide d'un fichier Compose. | ||
+ | |||
+ | La première étape, c'est de déclarer la « version » du fichier de configuration. Actuellement, | ||
+ | |||
+ | ```yaml | ||
+ | version: " | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | Note les guillemets pour indiquer une chaîne de caractère. Des fois, les guillemets sont optionnels, mais sur la version Compose râle s'ils n'y sont pas. | ||
+ | </ | ||
+ | |||
+ | Regardons la suite : | ||
+ | |||
+ | ```yaml | ||
+ | version: " | ||
+ | |||
+ | services: | ||
+ | quentin: | ||
+ | image: nginx: | ||
+ | container_name: | ||
+ | ports: | ||
+ | - 8001:80 | ||
+ | volumes: | ||
+ | - ./ | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | On commence par déclarer un ensemble de **services**. Dans la terminologie Compose, un service = un conteneur. Ici, il n'y en a qu'un, c'est notre serveur web. On le **nomme** `quentin` juste en dessous de la directive `services`. | ||
+ | |||
+ | < | ||
+ | |||
+ | Ensuite, les autres directives devraient te parler d' | ||
+ | |||
+ | ### Gérer les volumes avec Compose | ||
+ | |||
+ | Si tu te rappelles, on avait [[technique: | ||
+ | |||
+ | Voici comment on ferait avec Compose : | ||
+ | |||
+ | ```yaml | ||
+ | volumes: | ||
+ | quentin_data: | ||
+ | name: quentin_data | ||
+ | | ||
+ | services: | ||
+ | quentin: | ||
+ | [...] | ||
+ | volumes: | ||
+ | - quentin_data:/ | ||
+ | ``` | ||
+ | |||
+ | Ici, pas besoin de faire de `docker volume create`, Compose s' | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Et comment on lance tout ça ? | ||
+ | |||
+ | Une fois que le fichier est édité, une commande ~~pour les gouverner tous~~ pour tout lancer : | ||
+ | |||
+ | ``` | ||
+ | # -d pour détacher, lancer en arrière plan | ||
+ | docker-compose up -d | ||
+ | ``` | ||
+ | |||
+ | Pour vérifier que tout s'est bien passé, on peut consulter les journaux. S'il n'y a aucun message, c'est plutôt bon signe. | ||
+ | |||
+ | ``` | ||
+ | docker-compose logs | ||
+ | ``` | ||
+ | |||
+ | On peut ensuite vérifier que tout s'est bien lancé : | ||
+ | |||
+ | ``` | ||
+ | curl pica01-test.picasoft.net: | ||
+ | ``` | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | |||
+ | Compose a créé le volume `quentin_data` et l'a monté sur `/ | ||
+ | |||
+ | Maintenant, on voudrait bien mettre notre page d' | ||
+ | |||
+ | ``` | ||
+ | vim index.html | ||
+ | docker cp index.html quentin:/ | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | ```bash | ||
+ | # Exécute la commande bash dans le conteneur quentin | ||
+ | docker-compose exec quentin bash | ||
+ | ``` | ||
+ | |||
+ | Et de faire sa vie ! | ||
+ | |||
+ | Voyons que ce ça donne en action : copier un fichier dans le volume, le supprimer, voir que ça ne change rien, puis modifier le fichier dans le conteneur. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | On constate en même temps que dans le conteneur il n'y a aucun éditeur. C'est parce que dans l' | ||
+ | |||
+ | ### D' | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour le reste, on ne liste pas tout sur le wiki, mais on peut retrouver l' | ||
+ | |||
+ | ### Compléments | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Et maintenant ? | ||
+ | |||
+ | On est déjà pas mal, on a un moyen de créer des conteneurs de façon stable, à partir d'un fichier de configuration. Mais il manque encore quelque chose... vous ne trouvez pas que `pica01-test.picasoft.net: | ||
+ | |||
+ | Est-ce-qu' | ||
+ | |||
+ | < | ||
+ | |||
+ | Mais on a vu que le port 80 ne pouvait être écouté que par un seul service. Alors, si on a plusieurs URLs `team.picasoft.net`, | ||
+ | |||
+ | Et bien c'est là qu' |