Passer au contenu principal

Docker Compose

Docker Compose est un outil qui permet de définir et d’exécuter des applications Docker multi-conteneurs. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services de votre configuration.

Voici quelques clés importantes que vous pouvez utiliser dans votre fichier docker-compose.yaml :

Labels

Les labels permettent d’attribuer des métadonnées aux objets Docker. Ces métadonnées peuvent servir à diverses fins, y compris la documentation, la configuration, ... Un label est une paire clé-valeur stockée sous forme de chaîne. Chaque clé doit être unique au sein d’un objet. Si une même clé est attribuée plusieurs valeurs, la valeur la plus récemment écrite écrase toutes les valeurs précédentes.

Exemple :

services:
  webapp:
    image: nginx:latest
    labels:
      com.example.description: "Ce service exécute l'application web principale"
      com.example.department: "IT"

Expose

La clé expose est utilisée pour indiquer les ports sur lesquels le conteneur expose des services aux autres conteneurs dans le même réseau Docker. Cependant, cela n’expose pas les ports à l’hôte.

Exemple :

services:
  webapp:
    image: nginx:latest
    expose:
      - "80"

Cela signifie que le conteneur expose le port 80, mais il n’est pas mappé sur un port de l’hôte. Cependant, d’autres conteneurs dans le même réseau Docker peuvent accéder à ce service en utilisant le nom du conteneur ou l’adresse IP interne du conteneur.

Port

La clé ports permet de mapper les ports du conteneur sur les ports de l’hôte. Cela signifie que le service à l’intérieur du conteneur est accessible depuis l’extérieur via le port spécifié sur l’hôte.

Exemple :

services:
  webapp:
    image: nginx:latest
    ports:
      - "8080:80"

Cela signifie que le port 80 à l’intérieur du conteneur (où Nginx est en cours d’exécution) est mappé sur le port 8080 de l’hôte. Ainsi, vous pouvez accéder à Nginx depuis votre navigateur en utilisant l’URL http://localhost:8080

extra_hosts

La clé extra_hosts est utilisée pour spécifier des entrées de résolution DNS supplémentaires pour les conteneurs. Cette fonctionnalité permet de définir des alias pour des hôtes ou des adresses IP qui ne sont pas résolus par défaut par le service DNS interne de Docker.

Exemple :

services:
  web:
    image: nginx
    ports:
      - "80:80"
    extra_hosts:
      - "hostname1:192.168.0.10"

Dans cet exemple, le conteneur web peut résoudre le nom d’hôte hostname1 vers l’adresse IP 192.168.0.10. Cela revient à ajouter une entrée 192.168.0.10 hostname1 dans le fichier /etc/hosts à l’intérieur du conteneur de ce service.

En d’autres termes, chaque fois que le conteneur essaiera d’accéder à hostname1, il sera redirigé vers 192.168.0.10.

Profiles

Les profils facilitent l'adaptation de votre application à divers environnements ou cas d'utilisation. Ils permettent d'activer ou de désactiver certains services selon les besoins.

Les services qui ne sont pas associés à un profil spécifique démarrent systématiquement par défaut, tandis que ceux qui sont liés à un ou plusieurs profils ne s'activent que lorsque ces profils sont explicitement activés.

Pour démarrer un profil spécifique, vous avez deux possibilités : soit utiliser l'option --profile en ligne de commande, soit définir la variable d'environnement COMPOSE_PROFILES.

Exemple :

Pour démarrer les services associés au profil frontend ou debug, vous pouvez utiliser la commande suivante :

docker compose --profile frontend --profile debug up

Ou bien, vous pouvez définir la variable d'environnement COMPOSE_PROFILES de cette manière :

COMPOSE_PROFILES=frontend,debug