4204d4

🐳 Docker-compose – Introduction - Partie 2

Date : 12 février 2021 - Révisé le 2025.12.04

YAML

3 – Mise en place d’une application multi-services (MariaDB + Adminer)

Action 3.1 – Renseigner le fichier docker-compose.yml

Cet exemple utilise depends_on pour s’assurer que la base de donnĂ©es (maBD) dĂ©marre avant l’interface de gestion (gestionBDviaAppWeb).

version: "3.9"
services:
  maBD:
    image: mariadb
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
  gestionBDviaAppWeb:
    image: adminer
    ports:
      - "8080:8080"
    depends_on:
      - maBD

[Image : img-adminer-mariadb-depends.png - Diagramme montrant deux conteneurs (MariaDB et Adminer) connectés via le réseau par défaut créé par docker-compose, avec une dépendance de démarrage Adminer -> MariaDB.]

Consolidation des exercices précédents (Exemple complet)

version: "3.9"
services:
  srv01:
    image: alpine
    hostname: serveur01
    container_name: serveur01
    stdin_open: true
    tty: true
    networks:
      - reseauAlpine
    environment:
      - JESUIS=Le spécialiste de la paresse
    # command: sh

  srv02:
    image: alpine
    container_name: serveur02
    stdin_open: true
    tty: true
    networks:
      - reseauAlpine
    environment:
      - JESUIS=Celui qui fait du sur place
    command: top

  srv99:
    image: alpine
    container_name: serveur99
    stdin_open: true
    tty: true
    volumes:
      - ./:/420

  serveurweb:
    image: nginx
    container_name: serveurWEB
    volumes:
      - ./templates/site.template:/etc/nginx/templates
      - ./contenuweb:/usr/share/nginx/html:rw
    ports:
      - "8080:80"
    environment:
      - NGINX_HOST=monServeurWeb.com
      - NGINX_PORT=80

  maBD:
    image: mariadb
    networks:
      - reseauAdminer
    environment:
      - "MYSQL_ROOT_PASSWORD=root"

  gestionBDviaAppWeb:
    image: adminer
    networks:
      - reseauAdminer
    ports:
      - "8081:8080"
    depends_on:
      - maBD

networks:
  reseauAlpine:
    name: jeSuisLeReseauAlpine
    driver: bridge
  reseauAdminer:
    name: jeSuisLeReseauAdminer
    driver: bridge

4 – Laboratoire 1 (MySQL + phpMyAdmin)

DĂ©marrer, Ă  partir d’un fichier docker-compose, le systĂšme de micro-services suivants :

  1. mysql, avec le stockage local, dossier mesBD, des bases de données.
  2. phpmyadmin, sur le port 88.
  3. Créer, à partir de phpmyadmin, la base de données wordpress.
  4. Vérifier que la BD a été créée sur votre disque local.

Note : Si le fichier n’est pas nommĂ© docker-compose.yml, alors il faut le nommer dans les commandes, par exemple :


5 – Laboratoire 2 (WordPress, MariaDB et phpMyAdmin)

Mettre en place un site WordPress, en utilisant docker-compose, pour la CIE_ABC, en respectant le devis suivant :

Tester l’application WordPress de la CIE ABC et le service phpMyadmin.


6 – Quelques commandes utiles

Commande Description
docker-compose config Valider le fichier docker-compose.yml.
docker-compose up Démarre les services et affiche les logs.
docker-compose up -d Démarre les services en arriÚre-plan (mode détaché).
docker-compose logs Affiche les logs de tous les services.
docker-compose ps Affiche l’état des services.
docker-compose stop ArrĂȘte les conteneurs (sans les supprimer).
docker-compose down ArrĂȘte et supprime les conteneurs, rĂ©seaux et volumes par dĂ©faut.

7 – Exemple de docker-compose avec un build

Docker-compose permet la mise en place d’images personnalisĂ©es pendant le processus de dĂ©marrage d’une application multi-services.

Action 7.1 – Enregistrer le fichier Dockerfile

Dans un dossier vide, enregistrer le fichier Dockerfile :

# ###########################################################################
# Fichier: Dockerfile
# Auteur: Alain Boudreault
# Date: 2021.03.05
# Description: Exemple d'un Dockerfile avec,
#
# 1 - Des variables d'environnement,
# 2 - Un invite de commande personnalisé pour tous les 'users',
# 3 - Le démarrage automatique d'une application du conteneur.
# ###########################################################################
FROM debian
LABEL authors="Alain Boudreault <aboudrea@cstj.qc.ca>"
LABEL Atelier="7.1 de http://ve2cuy.com/420-4d4b/index.php/docker-compose-introduction-2/"
ENV UN_MOT_DE_PASSE=tepasserieux
ENV UNE_BASE_DE_DONNEES=db_de_la_ciex
# Definir des variables avec des séquences ANSI pour afficher de la couleur sous BASH
ENV RESET="\[\033[0m]" \
    ROUGE="\[\033[0;31m]" \
    VERT="\[\033[01;32m]" \
    BLEU="\[\033[01;34m]" \
    JAUNE="\[\033[0;33m]"
# Sympathique petit (prompt) invite en couleur pour tous les utilisateurs

# ATTENTION, placer le symbole % devant H, M et S!
# TODO: RUN echo 'export PS1="${VERT}\D{H:M:S} - ${JAUNE}\u@docker${ROUGE}\nDossier: [\W]\n${RESET}\$ "' >> /etc/bash.bashrc
RUN apt-get update
RUN apt-get install git lynx -y
# Lancer le fureteur au démarrage. Tester avec http://lite.cnn.com/en
# CMD ["lynx", "http://lite.cnn.com/en"]

Action 7.1b – BĂątir l’image (Test intermĂ©diaire)

docker build -t perso .

Note : Avec docker-compose, il n’est pas nĂ©cessaire de bĂątir l’image au prĂ©alable.

Action 7.2 – Afficher les informations de l’image

docker inspect perso

Note : Remarquer les propriétés Author, Env et Labels.

Action 7.3 – Renseigner le fichier docker-compose

Ce fichier utilise l’instruction build: . pour indiquer Ă  docker-compose de construire l’image Ă  partir du Dockerfile se trouvant dans le rĂ©pertoire courant.

version: '3.3'
# docker-compose build
# docker-compose up --build -d
# OU
# docker-compose up -d
services:
  # Note: pas de caractĂšres majuscules dans le nom du service
  mondebian:
    image: alainboudreault/serveur01
    container_name: serveur01
    build: .
    restart: always
    stdin_open: true # docker run -i
    tty: true # docker run -t
    environment:
      - VERSION=action7.1
    networks:
      - reseau7.1
  web:
    image: nginx:latest
    ports:
      - "8000:80"
    restart: always
    volumes:
      - ./web:/usr/share/nginx/html/perso
    networks:
      - reseau7.1

networks:
  reseau7.1:
    name: jeSuisLeReseau7.1
    driver: bridge

9 – Utilisation de variables dans docker-compose.yml

Il est possible d’externaliser les variables de configuration dans un fichier .env.

Action 9.1 – Le fichier .env

DB_PORT=3306
DB_ROOT_PASS=password
DB_USER=bob
DB_PASS=password

Action 9.2 – Utilisation dans docker-compose.yml

services:
  db:
    image: mariadb:10.4.13
    ports:
      - ${DB_PORT}:3306
    volumes:
      - ./db_data:/var/lib/mysql
    tmpfs:
      - /tmp/mysql-tmp
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASS}"
      MYSQL_USER: "${DB_USER}"
      MYSQL_PASSWORD: "${DB_PASS}"

Note : voir la directive depends_on pour gérer les dépendances entre services.


10 – Configuration avancĂ©e d’un Nginx (substitution d’environnement)

Pour configurer dynamiquement Nginx à partir de variables d’environnement (PORT=8080), on utilise la substitution (envsubst).

Fichier config.site (template)

server {
    listen ${PORT};
    server_name localhost;
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

Fichier docker-compose.yml (avec envsubst)

web:
  image: nginx
  volumes:
    - ./site.template:/etc/nginx/conf.d/site.template
  ports:
    - "3000:8080"
  environment:
    - PORT=8080
  command: /bin/sh -c "envsubst < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

Crédits

Document rédigé par Alain Boudreault © 2021-2026
Version 2025.12.03.1
Site par ve2cuy