CodeGym /Cours /Docker SELF /Création de docker-compose.yml

Création de docker-compose.yml

Docker SELF
Niveau 15 , Leçon 2
Disponible

3.1 Fichier compose.yaml

Le fichier compose.yaml (ou l'une des variantes suivantes : docker-compose.yaml, docker-compose.yml, compose.yml) — c'est le fichier de configuration principal utilisé par Docker Compose pour définir et gérer des applications multi-éléments. Il décrit quels conteneurs (services) doivent être lancés, comment ils interagissent entre eux et quelles ressources ils nécessitent.

Pour être cohérents dans cette conférence, nous utiliserons la variante compose.yaml, car elle est recommandée pour les versions modernes de Docker Compose.

Structure du fichier compose.yaml

Le fichier compose.yaml contient plusieurs sections, chacune décrivant différents aspects de la configuration d'une application. Les principales sections incluent :

  1. version : spécifie la version du fichier Compose (par exemple, '3.9').
  2. services : décrit les conteneurs (services), leurs configurations et dépendances.
  3. volumes : définit les volumes pour stocker les données entre les conteneurs et l'hôte.
  4. networks : configure les réseaux par lesquels les services communiquent entre eux.

3.2 Directives principales

1. version

La directive version définit la version de la syntaxe Docker Compose utilisée dans le fichier compose.yaml. Au moment de la rédaction de cet article, la version la plus récente est la version 3, notamment ses mises à jour comme les versions 3.8 et 3.9.

Yaml

version: '3.9'

2. services

La section services définit les conteneurs que Compose doit créer et lancer. Chaque service représente un conteneur individuel avec une configuration spécifique.

Exemple :

Yaml

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

Dans cet exemple, deux services sont définis : web et db. Le service web utilise l'image nginx:latest et ouvre le port 80. Le service db utilise l'image mongo:latest et attache un volume pour le stockage des données.

3. volumes

La section volumes est utilisée pour définir les volumes qui peuvent être attachés aux conteneurs pour le stockage des données. Cela est utile pour préserver les données lorsque les conteneurs sont redémarrés.

Exemple :

Yaml

volumes:
  mongo-data:

4. networks

La section networks permet de définir des réseaux personnalisés où travailleront les conteneurs. Cela assure l'isolation et la configuration des connexions réseau. Si aucun réseau n'est spécifié, Docker Compose créera un réseau par défaut, et tous les services y seront connectés.

Exemple :

Yaml

networks:
  front-end:
  back-end:

3.3 Directives pour configurer les services

Les directives principales pour configurer les services :

1. image

La directive image spécifie l'image qui sera utilisée pour créer un conteneur.

Exemple :

Yaml

services:
  web:
    image: nginx:latest

2. build

La directive build est utilisée pour indiquer le chemin vers le Dockerfile qui doit être utilisé pour construire l'image.

Exemple :

Yaml

services:
  app:
    build: ./app

3. ports

La directive ports définit les ports qui doivent être ouverts et redirigés de la machine hôte vers le conteneur.

Exemple :

Yaml

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

4. volumes

La directive volumes monte les volumes dans les conteneurs, permettant de conserver les données entre les redémarrages des conteneurs.

Exemple :

Yaml

services:
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

5. environment

La directive environment définit les variables d'environnement pour le conteneur.

Exemple :

Yaml

services:
  app:
    image: myapp:latest
    environment:
      - NODE_ENV=production
      - API_KEY=1234567890

6. depends_on

La directive depends_on indique que ce service dépend d'autres services et doit être démarré après eux.

Important ! Lors du démarrage de votre service, il n'y a aucune garantie à 100 % que tous les services nécessaires à son fonctionnement soient complètement prêts. Ils seront démarrés — oui, mais leur bon fonctionnement ultérieur n'est pas garanti. Ce problème est résolu avec des health-check, mais cela viendra plus tard.

Exemple :

Yaml

services:
  web:
    image: nginx:latest
    depends_on:
      - db
  db:
    image: mongo:latest

7. command

La directive command permet de redéfinir la commande qui sera exécutée lors du démarrage du conteneur.

Exemple :

Yaml

services:
  app:
    image: myapp:latest
    command: python app.py

8. networks

La directive networks connecte un service à un ou plusieurs réseaux.

Exemple :

Yaml

services:
  web:
    image: nginx:latest
    networks:
      - front-end
  db:
    image: mongo:latest
    networks:
      - back-end

3.4 Exemple complet

Exemple d'un fichier complet compose.yaml

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
    networks:
      - front-end
        
  app:
    build: ./app
    volumes:
      - ./app:/usr/src/app
    environment:
      - NODE_ENV=production
    networks:
      - front-end
      - back-end
        
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db
    networks:
      - back-end
        
volumes:
  mongo-data:
        
networks:
  front-end:
  back-end:

Dans cet exemple :

  • Trois services sont définis : web, app et db.
  • web utilise une image Nginx, monte un fichier de configuration et dépend du service app.
  • app est construit à partir d'un Dockerfile local, monte le code source de l'application et utilise des variables d'environnement.
  • db utilise une image MongoDB et monte un volume pour le stockage des données.
  • Deux volumes et deux réseaux sont créés pour l'isolation et la gestion de l'interaction entre les services.

Note : un volume est mongo-data, et un autre est un répertoire monté de la machine hôte (par exemple, ./app).

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION