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 la3.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
etexterne
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
etcache
.
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.