Étiquette : docker

  • En route vers Traefik 3

    En route vers Traefik 3

    Traefik est un load balancer permettant d’appliquer dynamiquement des configurations qui collent aux containers Docker faisant ainsi que la configuration de celui-ci est totalement dynamique grâce aux labels

    Nous l’utilisons depuis la version 1, puis nous sommes passés à la version 2 et dorénavant la version 3

    La version 3 apporte le support de HTTP 3, en effet, nous étions bloqués en version 2

    Pourquoi Traefik ?

    Comme nous le disions plus tôt, quand on a des containers, le plus simple pour les mettre en ligne est de définir la configuration avec des labels, afin que la Traefik se configure et utilise, si plusieurs backends sont présents, les backends déclarés et fasse le load balancing nativement

    Ce qui est surtout intéressant est que chaque container porte sa configuration de load balancing. Ainsi, si on détruit le container, la configuration est effacée avec

    Un autre avantage de Traefik est qu’il gère nativement toute la partie LetsEncrypt et ce, de façon dynamique. Si vous déclarez vouloir un certificat SSL LetsEncrypt, Traefik va se charger de le générer et de gérer le renouvellement. Il faut au passage que tout ceci soit disponible sur internet, sinon cela ne fonctionne pas.

    Comment nous déployons Traefik ?

    Traefik est déployé en entrée de réseau, et écoute les ports HTTP(s) les plus classiques, à savoir les ports 80 et 443.

    Nous lui dédions un sous-réseau nommé gateway ou ingress par exemple, dans lequel on viendra connecter les serveurs Web / load balancer / applications qui sont à présenter sur internet.

    Chaque application est ainsi connectée dans le réseau ingress / gateway avec une adresse IP qui lui est propre où traefik lui adressera le trafic reçu. Chaque application possède également son propre réseau applicatif qui lui est dédié, permettant ainsi une communication sans limite entre les différents composants la formant

    Voici un exemple de configuration :

    Pour la partie traefik

    services:
      reverse-proxy:
        image: traefik:v3
        container_name: traefik
        restart: "always"
        command:
          - "--accesslog=true"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.network=gateway"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
          - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
          - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
          - "--certificatesresolvers.myresolver.acme.email=XXX@XXX.fr"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          # The HTTP port
          - "80:80"
          - "443:443"
        volumes:
          - "./letsencrypt:/letsencrypt"
          # So that Traefik can listen to the Docker events
          - /var/run/docker.sock:/var/run/docker.sock
        networks:
          - default
        logging:
          driver: "json-file"
          options:
            max-size: "10M"
            max-file: "3"
    
    networks:
      default:
          name: gateway

    Pour une application (ici notre blog)

    services:
      blog_devclic_website:
          image: XXXXXXXX
          restart: always
          ulimits:
           memlock:
            soft: -1
            hard: -1
          networks:
            - default
          labels:
            - "traefik.enable=true"
            - "traefik.http.routers.blog_devclic_fr.rule=Host(`blog.devclic.fr`)"
    
    networks:
      default:
          name: gateway

    Notre blog n’a pas de base de données au sens propre, de ce fait, il n’a pas besoin d’un réseau dédié. Mais si vous avez une base de données quelconque, type MongoDB, MySQL ou autre, vous pouvez alors créer un réseau pour votre application et l’utiliser avec votre applicatif, cela vous permet de séparer la couche présentation des autres couches applicatives

    Et pour mettre à jour Traefik, nous utilisons watchtower, nous nous retrouvons ainsi, avec la dernière version de Traefik stable sans que nous ayons besoin de nous en occuper

  • Docker et cron : comment faire ?

    Docker et cron : comment faire ?

    Récemment, sur un projet, nous utilisons, afin de séparer les environnements, des conteneurs Docker. Ce projet utilise des crons pour diverses opérations, la question que nous nous posions est comment exécuter des crons dans un conteneur Docker ?

    Qu’est ce qu’un cron ?

    Un cron est un « programme » ou un script executé automatiquement par un système informatique et selon un planning bien défini.

    On peut ainsi exécuter des taches précises à des moments précis. Les crons fonctionnent aussi bien sous Linux, Unix que Windows. Dans le cas de notre article, ici, nous traitons de la partie Linux

    On peut par exemple utiliser des crons pour sauvegarder des données, transférer des données, importer des données et bien d’autres possibilités sont offertes par cette fonctionnalité

    Crontab à la rescousse

    Etant donné qu’ici, il s’agit d’un serveur exécutant des conteneurs, nous pouvons utiliser tout bêtement la crontab et déclarer les exécutions voulues de cette façon :

    0 18 * * 1-5 /usr/bin/docker exec XXXX php lechemindemonfichier.php

    Ici, pour faire simple, on lance tout simplement un cron normalement et on demande à Docker de lancer dans le conteneur nommé XXXX de lancer la commande précisée, ici, une commande PHP

    Attention

    Cela fonctionne plutôt bien, dès lors que nous ne mettons pas l’instruction -it demandant à docker de lancer un pseudo terminal et forçant le cron à ne pas s’exécuter correctement

    Les symptômes sont simples, on voit le cron se lancer mais rien ne s’exécute à cause de ces arguments dans la commande

  • WatchTower : l’outil qui met à jour vos containers Docker

    WatchTower : l’outil qui met à jour vos containers Docker

    Comme sur beaucoup d’infrastructures, nous utilisons Docker et il est relativement fréquent de devoir procéder à des mises à jour des containers que nous déployons. Afin d’automatiser à minima cette tâche, nous nous sommes mis en quête de trouver l’outil qui pourrait nous simplifier la tâche, c’est ce que propose WatchTower (suite…)