Docker Compose
Présentation
Docker Compose est un outil permettant de définir et de gérer des applications complexe, comme par exemple une architecture en micro services.
Le principe de base de l'outil consiste à décrire dans un fichier yml l'ensemble des services qui composent notre stack technique et qui sera ensuite lu par un binaire écrit en python docker-compose.
Le fichier compose.yml
Un fichier docker-compose décrit les composants d'une stack technique comme les services, volumes, networks, etc.
Voici un exemple de configuration :
version: "3.9"
services:
db:
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- local:
restart: always
wordpress:
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
networks:
- local:
restart: always
depends_on:
- db
phpmyadmin:
image: phpmyadmin:phpmyadmin
ports:
- "8001:80"
networks:
- local:
restart: always
depends_on:
- db
volumes:
db_data:
wordpress_data:
networks:
local:On commence par spécifier la version du fichier, ici 3.9. Cette version doit être définie en corrélation avec la version du daemon de Docker. Toutefois depuis la versoin 25.05, cet argument n'est plus nécessaire et génère un warning.
On déclare ensuite un ensemble de services : db, wordpress, phpmyadmin. Chacun de se ces services sont basées sur une image et à la manière d'une exécution docker-cli possèdent des volumes, des variables d'environnement ou encore des ports.
Enfin on déclare les volumes, networks qui sont utilisés par la stack.
Concrètement, le binaire docker-compose (acessible via docker compose sur les versions récentes de Docker) effectue les mêmes opérations que l'on pourrait être amené à écrire via docker-cli. L'ensemble des éléments configurables sont disponibles via la spécification officielle ou encore via la documentation de Docker. Les principaux intérêts de l'outil sont de permettre de lancer les applications via docker-compose up indépendamment du langage, de la plateforme utilisée ou encore de créer des stacks en fonction des environnements d'éxécution.
Malheureusement, la richesse de l'outil, tout comme son évolution constante ne permet pas d'en sortir un résumé efficace et surtout suivi dans le temps. Toutefois, la documentation officielle couvre parfaitement l'ensemble des possibilités.
9.3 Le binaire docker-compose
Le binaire docker-compose permet de gérer le cycle de vie de l'application au format Compose. Son installation est indépendance de Docker mais il se trouve être packagé par défaut avec Docker-desktop sur Mac, Windows.
La commande docker-compose utilise le format suivant :
docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
docker-compose -f docker-compose.yml up -d --force-recreateL'instruction -f est optionnelle. Elle sert à spécifier le ou les fichiers utilisés par la stack ; là où le binaire recherche par défaut un fichier docker-compose.yml.
Les principales commandes sont les suivantes :
| Commande | Description |
|---|---|
| up / down | Création / Suppression d'une application (services, volumes, réseaux) |
| start / stop | Démarrage / Arrêt d'une application |
| build | Build des images et des services |
| pull | Téléchargement des images |
| logs | Visualisation des logs de l'application |
| scale | Modification du nombre de containers pour un service |
| ps | Liste les containers de l'application |
La liste complète des possibilités de docker peut être obtenue à l'aide de docker compose --help
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--profile NAME Specify a profile to enable
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert deploy
keys in v3 files to their non-Swarm equivalent
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information