Docker Compose - MaximeDanlee/admin2-projet GitHub Wiki

Docker Compose

Dans le but de synchoniser le lancement des différents conteneurs pour le service Web Publique (nginx, php, certbot) un fichier docker-compose a été écrit. Ce fichier permet de configurer un ensemble de conteneurs à l'avance et de les lancer avec une simple commande :

docker-compose up

Pour arrêter cet ensemble de conteneurs, lancer la commande suivante :

docker-compose stop

Cette façon d'utiliser Docker est disponible sur tous les serveurs ayant installé docker compose.

Explications du Fichier

Le fichier ci-dessous fait donc plusieurs choses :

  1. Il démarre les différents services spécifiés (web publique, php, certbot),
  2. Indique les commandes à lancer dans le conteneur,
  3. Il lies les éventuels volumes au conteneur,
  4. Il crée les réseaux spécifiés,
  5. Il place les conteneurs dans les réseaux spécifiés.

Voici le contenu du fichier que nous avons utilisé, completé avec des commentaires

services:
    web_publique:
        image: adminprojet123/web_public:latest

        # indique qu'il faut toujours tenter de redémarrer le conteneur, peu importe la cause d'arrêt
        restart: always

        # indique les ports à lier au vps
        ports:
            - "80:80"
            - "443:443"

        # indique les différents volumes à lier entre le conteneur et le vps
        volumes:

            # volume permettant d'enregistrer les logs sur le vps et non dans le conteneur
            - ./nginx/logs/nginx.log:/etc/nginx/main_access.log

            # volumes permettant d'utiliser l'https et également rendre les certificats permanenets sur le vps
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/certbot

        # indique le réseau du conteneur
        networks:
            default:
                ipv4_address: 172.16.129.4

        # indique la commande à lancer dans le conteneur
        # ici, on attend en permanence pour redémarrer les fichiers de configuration dès que le conteneur certbot a renouvlé les certificats pour le https
        command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

    php:
        image: adminprojet123/php_service:latest

        # indique le réseau du conteneur
        networks:
            default:
                ipv4_address: 172.16.129.9

        # indique les différents volumes à lier entre le conteneur et le vps
        volumes:

            # volume pour placer les informations de connection à la base de données dans le conteneur
            - ./nginx/mysql.ini:/etc/nginx/html/b2b/mysql.ini

    certbot:
        image: certbot/certbot:latest

        # commande à lancer au lancement du conteneur
        # dans ce cas ci, le conteneur va renouvler les différents certificats pour le https dès que nécessaire
        entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

        # indique les différents volumes à lier entre le conteneur et le vps
        volumes:

            # volume pour rendre les logs disponible dans un fichier sur le vps
            - ./certbot/logs:/var/log/letsencrypt

            # volumes pour les différents certificats pour le https
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/data:/var/www/certbot

# différents réseaux
networks:

    # on indique la présence d'un réseau déjà existant avant le lancement du docker compose
    # aucun nouveau réseau est donc créé en lancant la commande docker-compose up
    default:
        external:
            name: zone_dmz