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
3revient à sélectionner la3.0ce 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
interneetexternesont 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-donneesetcache.
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.