2017-10-16 01:10:34 +00:00
|
|
|
|
Composition de conteneurs
|
2021-09-21 09:44:12 +00:00
|
|
|
|
-------------------------
|
2015-10-29 04:45:40 +00:00
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
### Automatiser le lancement de conteneurs
|
2015-10-29 04:45:40 +00:00
|
|
|
|
|
2017-10-16 01:10:34 +00:00
|
|
|
|
Au lieu de faire un script pour construire et lancer tous vos conteneurs, nous
|
|
|
|
|
allons définir à la racine de notre projet un fichier `docker-compose.yml` qui
|
2019-10-16 01:54:56 +00:00
|
|
|
|
contiendra les paramètres d'exécution.
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```yaml
|
2021-09-16 01:45:54 +00:00
|
|
|
|
version: "3.9"
|
2018-11-16 01:38:41 +00:00
|
|
|
|
services:
|
|
|
|
|
influxdb:
|
|
|
|
|
...
|
|
|
|
|
chronograf:
|
|
|
|
|
build: grafana/
|
|
|
|
|
image: nginx
|
|
|
|
|
ports:
|
|
|
|
|
- "3000:3000"
|
|
|
|
|
volumes:
|
|
|
|
|
- ./:/tmp/toto
|
|
|
|
|
links:
|
|
|
|
|
- influxdb
|
2016-09-14 20:51:14 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2017-10-16 01:10:34 +00:00
|
|
|
|
Ce fichier est un condensé des options que nous passons habituellement au
|
|
|
|
|
`docker container run`.
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
#### `version`
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2017-10-16 01:10:34 +00:00
|
|
|
|
Notons toutefois la présence d'une ligne `version` ; il ne s'agit pas de la
|
2016-09-15 00:46:46 +00:00
|
|
|
|
version de vos conteneurs, mais de la version du format de fichier
|
2017-10-16 01:10:34 +00:00
|
|
|
|
`docker-compose` qui sera utilisé. Sans indication de version, la version
|
2020-09-21 21:48:16 +00:00
|
|
|
|
originale sera utilisée, ne vous permettant pas d'utiliser les dernières
|
|
|
|
|
fonctionnalités de Docker.
|
2016-09-15 00:46:46 +00:00
|
|
|
|
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
#### `services`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Cette section énumère la liste des services (ou conteneurs) qui seront gérés
|
2022-09-13 21:19:59 +00:00
|
|
|
|
par `docker compose`.
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2021-09-19 22:19:49 +00:00
|
|
|
|
Ils peuvent dépendre d'une image à construire localement, dans ce cas ils
|
|
|
|
|
auront un fils `build`. Ou ils peuvent utiliser une image déjà existante, dans
|
|
|
|
|
ce cas ils auront un fils `image`.
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Les autres fils sont les paramètres classiques que l'on va passer à `docker
|
|
|
|
|
run`.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
#### `volumes`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2022-05-12 00:46:31 +00:00
|
|
|
|
Cette section est le pendant de la commande `docker volume`.
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2017-10-16 01:10:34 +00:00
|
|
|
|
On déclare les volumes simplement en leur donnant un nom et un driver comme
|
2022-02-24 19:43:43 +00:00
|
|
|
|
suit :
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```yaml
|
2018-11-16 01:38:41 +00:00
|
|
|
|
volumes:
|
|
|
|
|
mysql-data:
|
|
|
|
|
driver: local
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2017-10-16 01:10:34 +00:00
|
|
|
|
Pour les utiliser avec un conteneur, on référence le nom ainsi que
|
2022-02-24 19:43:43 +00:00
|
|
|
|
l'emplacement à partager :
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```yaml
|
2018-11-16 01:38:41 +00:00
|
|
|
|
[...]
|
|
|
|
|
mysql:
|
2016-09-15 02:27:59 +00:00
|
|
|
|
[...]
|
2018-11-16 01:38:41 +00:00
|
|
|
|
volumes:
|
|
|
|
|
- mysql-data:/var/lib/mysql
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
#### `network`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2022-05-12 00:46:31 +00:00
|
|
|
|
Cette section est le pendant de la commande `docker network`.
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Par défaut, Docker relie tous les conteneurs sur un bridge et fait du NAT pour
|
2021-09-19 22:19:49 +00:00
|
|
|
|
que les conteneurs puissent accéder à l'Internet. Mais ce n'est pas le seul
|
2022-02-24 19:43:43 +00:00
|
|
|
|
mode possible !
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
De la même manière que pour les `volumes`, cette section déclare les réseaux
|
2022-02-24 19:43:43 +00:00
|
|
|
|
qui pourront être utilisés par les `services`. On pourrait donc avoir :
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```yaml
|
2018-11-16 01:38:41 +00:00
|
|
|
|
networks:
|
|
|
|
|
knotdns-slave-net:
|
|
|
|
|
driver: bridge
|
2016-09-15 02:27:59 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
##### Driver `host`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Le driver `host` réutilise la pile réseau de la machine hôte. Le conteneur
|
|
|
|
|
pourra donc directement accéder au réseau, sans NAT et sans redirection de
|
2021-09-19 22:19:49 +00:00
|
|
|
|
port. Les ports alloués par le conteneur ne devront pas entrer en conflit avec
|
2016-09-15 02:27:59 +00:00
|
|
|
|
les ports ouverts par la machine hôte.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
##### Driver `null`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Avec le driver `null`, la pile réseau est recréée et aucune interface (autre
|
|
|
|
|
que l'interface de loopback) n'est présente. Le conteneur ne peut donc pas
|
2022-05-12 00:46:31 +00:00
|
|
|
|
accéder à Internet, ni aux autres conteneurs, ...
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
|
|
|
|
Lorsque l'on exécute un conteneur qui n'a pas besoin d'accéder au réseau, c'est
|
|
|
|
|
le driver à utiliser. Par exemple pour un conteneur dont le but est de vérifier
|
|
|
|
|
un backup de base de données.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
##### Driver `bridge`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2021-09-19 22:19:49 +00:00
|
|
|
|
Le driver `bridge` crée un nouveau bridge qui sera partagé entre tous les
|
2016-09-15 02:27:59 +00:00
|
|
|
|
conteneurs qui la référencent.
|
|
|
|
|
|
|
|
|
|
Avec cette configuration, les conteneurs ont accès à une résolution DNS des
|
|
|
|
|
noms de conteneurs qui partagent leur bridge. Ainsi, sans avoir à utiliser la
|
2022-05-12 00:46:31 +00:00
|
|
|
|
fonctionnalité de `link` au moment du `run`, il est possible de se retrouver
|
2016-09-15 02:27:59 +00:00
|
|
|
|
lié, même après que l'on ait démarré. La résolution se fera dynamiquement.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
#### Utiliser le `docker-compose.yml`
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
Consultez la documentation[^COMPOSEDOC] pour une liste exhaustive des options
|
|
|
|
|
que nous pouvons utiliser.
|
|
|
|
|
|
|
|
|
|
[^COMPOSEDOC]: La documentation des `docker-compose.yml` :
|
|
|
|
|
<https://docs.docker.com/compose/compose-file/>
|
2016-09-15 02:27:59 +00:00
|
|
|
|
|
2019-10-16 01:54:56 +00:00
|
|
|
|
Une fois que notre `docker-compose.yml` est prêt, nous pouvons lancer
|
2022-02-24 19:43:43 +00:00
|
|
|
|
la commande suivante et admirer le résultat :
|
2016-09-14 20:51:14 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2022-09-13 21:19:59 +00:00
|
|
|
|
docker compose up
|
2016-09-14 20:51:14 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-09-15 00:46:46 +00:00
|
|
|
|
|
2022-09-13 21:19:59 +00:00
|
|
|
|
Encore une fois, testez la bonne connexion entre `chronograf` (accessible sur
|
|
|
|
|
<http://localhost:8888>) et `influxdb`.
|