04/04/2024

1. Structure de base du fichier YAML

Lu 526 fois Licence Creative Commons

Créer un fichier nommé docker-compose.yml.

Version

Un fichier Compose commence par déclarer la version de la spécification Compose utilisée dans le fichier:

version: "3.8"

Attention: Veillez à préciser la version exacte souhaitée (normalement la plus récente). Indiquer seulement 3 revient à sélectionner la 3.0 ce qui pourrait vous priver de certaines fonctionalités.
N'hésitez pas à consulter la référence de configuration qui contient une matrice de compatibilité au début.

Mise à jour: cette option est dépréciée dans les dernières version de Docker Compose et n'est donc plus nécessaire.

Réseaux

La clé de premier niveau networks permet de déclarer les réseaux utilisés dans votre stack. On utilise généralement des réseaux de type bridge:

networks:
    interne:
	    driver: bridge
	externe:
	    driver: bridge

Ici interne et externe sont les noms des réseaux, à remplacer par ce que vous souhaitez.

La déclaration de ces réseaux n'implique pas automatiquement que les conteneurs y seront connectés, cette partie est gérée dans la configuration des services.
Voir la configuration complète dans la documentation: Network configuration reference.

Volumes

Comme pour les réseaux, les volumes utilisés dans la stack sont déclarés par une clé de premier niveau volumes:

volumes:
    base-de-donnees:
	cache:

Ici sont déclarés 2 volumes base-de-donnees et cache.

Là encore, la déclaration des volumes n'implique pas leur utilisation par les conteneurs, qui se fait dans la configuration de service.

Attention: Les volumes déclarés ici sont des volumes nommés ! Les bind mounts (ou volumes liés) sont directement déclarés dans la configuration de service.

Voir la configuration complète dans la documentation: Volume configuration reference.

Services

Dans un application dite multi-conteneur on ne parle plus de conteneurs mais bien de services. L'ensemble des services forment une stack.

On liste les services dans une clé de premier niveau services en indiquant le nom de notre choix à chaque service:

services:
    database:
	    # ...
	app:
	    # ...

Les sections suivantes vont résumer les options de configuration de service courantes. Pour aller plus loin, n'hésitez surtout pas à consulter la documentation: Compose file version 3 reference.

Image & build

La clé image permet d'indiquer l'image à utiliser pour un service:

services:
    app:
	    image: aymdev/mon-app:1.2.3

Documentation: image.

S'il s'agit d'une image créée localement à l'aide d'un Dockerfile, on peut ajouter la clé build pour indiquer le contexte, etc:

services:
    app:
	    image: aymdev/mon-app:1.2.3
		build:
		    context: ./dossier-app

Documentation: build.

Variables d'environnement

On peut définir une liste de variables d'environnement avec environment, ou un fichier de variables avec env_file:

services:
    app:
	    # ...
		env_file: ./config/app.env
		environment:
            APP_ENV: dev
			DATABASE_URL: pgsql:user:pass@database:5432/example

Documentation: env_file et environment.

Réseaux et ports

La clé networks liste les réseaux (déclarés dans la section networks de premier niveau) auxquels le service est connecté:

services:
    app:
	    # ...
		networks:
		    - interne
			- externe

Documentation: build.

Les mappings de ports sont listés par la clé ports

services:
    app:
	    # ...
		ports:
		    - 8000:80
			- 8080:443

Documentation: ports.

Volumes

La clé volumes liste les volumes liés (bind mounts) ou nommés (déclarés dans la section volumes de premier niveau) utilisés par le service:

services:
    app:
	    # ...
		volumes:
		    # volume nommé
		    - cache:/var/cache
			# bind mount
			- ./app:/srv/app

Documentation: volumes.