Docker compose va nous permettre de déployer tout une application en un seul clique. On peut imaginer une application python flask avec une base de données MySQL. Postgres va nous permettre de déployer la base de données dans un premier temps, puis, l'application python Flask. L'ensemble d'une application (flask + BDD) est appelé un service.
Pour installerdocker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose version 1.29.2, build unknown
Voici les paramètres de base pour docker compose :
Paramètre | Utilité |
---|---|
up | Créer et démarre le/les containers |
ps | Liste les containers |
stop | Stop le service |
start | Démarre le service |
restart | Redémarre le service |
down | Stop et supprime les containers, réseaux, images et volumes |
Soit :
Pour faire la commande docker-compose ps il faut être dans le dossier comportant le fichier docker-compose.yml. Sinon, il faut spécifier le fichier via le flag -f.
Nous allons prendre l'exemple d'un docker-compose sur la documentation docker :
Le dossier devrait ressembler à ça :
$ ls
app.py dockerfile requirements.txt
On ajoute maintenant le docker-compose.yml :
version: "3.9"
services:
web:
build: . # Build le dockerfile dans le répertoire courant
ports:
- "5000:5000" # Publie le port 5000
redis:
image: "redis:alpine" # Lance un container redis
On va maintenant lancer le service qui contient 2 containers : web (build du dockerfile) et redis :
$ docker compose up
Si l'on modifie le code de app.py (par exemple) il faudra rebuild le dockerfile via docker-compose :
$ docker compose build
# ou
$ docker compose build --no-cache
Afin d'utiliser les volumes dans notre docker-compose.yml nous devons respecter le format suivant (déploiement de Wordpress avec Docker Compose) :
version: "3.8"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql # On va chercher le volume db_data qui sera monté dans /var/lib/mysql
restart: unless-stopped # Type de restart
environment: # On met nos variables
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on: # Attend que le container db soit UP avant de lancer wordpress
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html # On va chercher le volume wordpress_data qui sera monté dans /var/www/html
ports:
- "8000:80" # Publication du port 8000
restart: unless-stopped # Type de restart
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes: # Déclaration des volumes utilisés au-dessus
db_data: {}
wordpress_data: {}