Docker et Symfony avec IP spécifique pour chaque Container

Passage d'une architecture de VMs ESXi à une architecture plus léger sous Docker, avec IP spécifique pour chaque Container

J’ai découvert Docker dans le cadre d’un projet de migration d’infrastructure virtuelle sous ESXi vers Docker. C’est une solution récente qui permet de faire de la virtualisation légère, à savoir pouvoir démarrer des applications plus rapidement, cloner des environnements sans avoir besoin de transférer le system Host …bref un truc intéressant.

Sur la plateforme ESXi, il y avait pas mal de VMs , chacune accessible directement par une IP spécifique. Reproduire ce fonctionnement avec Docker n’était pas une tâche facile avant la version Docker 1.10 (sortie en février 2016), qui a grandement améliorée la partie Networking de Docker.

Pour attribuer une adresse IP à un Container :

Ajout d’un nouveau réseau avec le subnet et la passerelle de votre bloc ip

docker network create --subnet 303.200.113.0/24 --gateway 303.200.113.254 ipovh

Démarrer un Container nginx avec l’ip valide, contenue dans le bloc ajouté précédemment

docker run --rm -it --net ipovh --ip 303.200.113.2 nginx

Pour avoir un bloc d’IP, la meilleure solution à l’heure actuelle est celle de l’offre SoYoustart d’OVH
Le Bloc IP de 16 est payable une fois (40 €). Si vous voulez des blocs supplémentaires il faut payer un abonnement mensuel ...

Passons maintenant à un cas pratique, faire tourner une application Symfony sur nos Containers

L’exemple suivant est déroulé sus Ubuntu Server 14.04.
Je vais détailler la partie Specific IP by Container dans Docker Compose, le sujet traitant la DockeriZation de Symfony est Famous sur Google.

  1. Se connecter sur le serveur Host (qui héberge les Containers) en SSH :  ssh me@superServer.io
  2. Ajouter un nouveau réseau :  docker network create --subnet 303.200.113.0/24 --gateway 303.200.113.254 ipovh
  3. Ajouter un projet Symfony : symfony new dosymf
  4. Copier ce répertoire dans la racine de votre projet. L’idée est d’avoir l’arborescence suivante  
    Arbo Symfony
  5. La magie se trouve dans le docker-compose.yml :
    networks:
      iptastic:
        ipv4_address: 303.200.113.2
  6. On affecte une IP à notre Container et on définit le réseau iptastic.

Plus bas, les caractéristiques du réseau iptastic :

networks:
  iptastic:
    external:
      name: ipovh

Voilà c’est fait, il faut construire et réveiller les containers :

docker-compose build
docker-compose up –d

Votre Symfony est accessible

Symfony 3

Merci à Jessie Frazelle et à Richard van den Brand