Publié le : 19/07/2021
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 :
- docker-compose :
docker-compose.yml
- et docker :
Dockerfile
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 leDockerfile
se trouve dans le même répertoire que le fichierdocker-compose.yml
grâce à la lignebuild: .
; - 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.