Publié le : 19/07/2021

Configurer Docker et docker-compose pour développer avec Symfony

Configurer docker et docker-compose pour développer avec symfony

Voici un article qui va montrer comment configurer docker et docker-compose pour développer avec Symfony.

Ainsi, nous allons créer les fichiers de configuration de :

Création du fichier docker-compose.yml pour pouvoir développer avec Symfony

Nous allons créer un fichier Yaml docker-compose.yml. C’est ce fichier qui va définir les différents services. Ensuite, nous pouvons exécuter une seule commande pour lancer tous les services qui se trouve dans le le fichier Yaml.

Dans un premier temps, nous allons configurer le conteneur du service MariaDB. Ci-dessous le contenu du fichier docker-compose.yml.

    db_app:
        image: mariadb:10.3.30
        container_name: data_app
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=xxx
            - MYSQL_DATABASE=db1
        volumes:
            - ./db:/var/lib/mysql
        ports:
            - "3306:3306"
        networks:
            - net-app

Le lignes ci-dessus définissent :

  • la base de données à utiliser : MariaDB 10.3.30 ;
  • le nom du conteneur : data_app ;
  • les variables d’environnement : mot de passe root et nom de la base de données ;
  • les volumes utilisés : nous utilisons un répertoire locale pour contenu les données de MariaDB ;
  • le port MariaDB qui sera utilisé.

Deuxièmement, nous allons configurer le service web dans le fichier Yaml. Ci-dessous le contenu du fichier docker-compose.yml concernant le service web.

    web_app:
        build: .
        container_name: web-app
        depends_on:
            - db_app
        ports:
            - "80:80"
        volumes:
            - ./log:/var/log/apache2
            - ./app:/var/www/html
            - ./vhosts:/etc/apache2/sites-enabled
        networks:
            - net-app

Les lignes de configuration du service web ci-dessus définissent :

  • Le fichier Dockerfile qui définit le conteneur web. Ici le Dockerfile se trouve dans le même répertoire que le fichier docker-compose.yml grâce à la ligne build: . ;
  • Le nom du conteneur ;
  • Ce conteneur web dépend du conteneur ayant pour nom db_app ;
  • Le port ;
  • Les volumes qui définissent où se trouve les fichiers web, les fichiers de log et les fichiers de configuration du conteneur web.

Ci-dessous le contenu complet du docker-compose.yml.

version: '3'
services:
    web_app:
        build: .
        container_name: web-app
        depends_on:
            - db_app
        ports:
            - "80:80"
        volumes:
            - ./log:/var/log/apache2
            - ./app:/var/www/html
            - ./vhosts:/etc/apache2/sites-enabled
        networks:
            - net-app
    db_app:
        image: mariadb:10.3.30
        container_name: data_app
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=xxx
            - MYSQL_DATABASE=db1
        volumes:
            - ./db:/var/lib/mysql
        ports:
            - "3306:3306"
        networks:
            - net-app
networks:
    net-app:

Création du fichier Dockerfile

Le fichier Dockerfile définit ci-dessous va définir les différents configurations du conteneur web.

FROM php:7.4-apache

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

RUN apt-get update \
    && apt-get install -y --no-install-recommends locales apt-utils git libicu-dev g++ libpng-dev libxml2-dev libzip-dev libonig-dev libxslt-dev;

RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
    echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen && \
    locale-gen

RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
   mv composer.phar /usr/local/bin/composer

RUN docker-php-ext-configure intl
RUN docker-php-ext-install pdo pdo_mysql gd opcache intl zip calendar dom mbstring zip gd xsl
RUN pecl install apcu && docker-php-ext-enable apcu

WORKDIR /var/www/
VOLUME ["/var/www/html","/var/log/apache2","/etc/apache2/sites-enabled"]

Définition du fichier de configuration d’apache 2 pour Symfony

Pour que Symfony puisse fonctionner dans le conteneur web Apache 2, il faut définir le fichier de configuration de ce dernier. Ce fichier de configuration se trouve dans le répertoire /etc/apache2/sites-enabled.

Ce fichier va contenir alors la définition des paramètres des hôtes virtuelles d’Apache 2.

Ci-dessous un exemple de ce fichier de configuration.

<VirtualHost *:80>
    ServerName localhost
 
    DocumentRoot /var/www/html/public
    DirectoryIndex /index.php
 
    <Directory /var/www/html/public>
        AllowOverride None
        Order Allow,Deny
        Allow from All
 
        FallbackResource /index.php
    </Directory>
    <Directory /var/www/html/public/bundles>
        FallbackResource disabled
    </Directory>
    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined
</VirtualHost>

Ainsi tout le projet de Symfony va se trouver dans le répertoire /var/www/html/.

Commande pour tester la configuration de docker et docker-compose pour développer sous Symfony

La commande pour lancer le conteneur docker contenu dans les fichiers de configuration est la suivante :

$ sudo docker-compose up

Cette commande va :

  • créer le conteneur de base de données en premier ;
  • ensuite, créer le conteneur web en se basant sur le fichier Dockerfile.

Vous êtes maintenant prêt à développer sous Symfony grâce au fichier configurer dans le fichier docker-compose.ymlm de docker-compose, Dockerfile de docker.

Les mots clés rattachés à cet article : Docker  -  Docker-compose  -  MariaDB  -  PHP  -  Symfony  -  Yaml

Nos clients

Une vingtaine de clients nationaux et internationaux