Aller plus loin avec docker-compose

Application Apache PHP Mariadb

Architecture du projet

.
├── Dockerfile
├── app
│   └── public
│       └── index.php
├── db
├── docker-compose.yml
├── log
└── vhosts
   └── 000-default.conf

Le docker-compose.yml

Service Web :

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

A quoi vont servir les volumes montés ?

Service db :

db_app:
   image: mariadb:10.5.8
   container_name: data_app
   restart: always
   environment:
         - MYSQL_ROOT_PASSWORD=xxx
         - MYSQL_DATABASE=db1
   volumes:
         - ./db:/var/lib/mysql
   ports:
         - "3306:3306"
  • A quoi sert la directive restart: always ?

  • Quel est le volume monté ? Pourquoi ?

  • Quel est le port naturel de mariadb ?

  • Est-ce qu c’est vraiment le bon endroit pour définir le password de root ?

  • Comment faire autrement ?

Le Dockerfile

# On utilise l'image php8.1-apache
FROM php:8.1-apache
# A quoi sert la ligne suivante ?
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
# On installe quelques dépendances pour composer et les extensions PHP
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;
# On met en place les locales
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
   echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
# On télécharge composer pour gérer les projets PHP
# pourquoi le déplace-t-on ?
RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
   mv composer.phar /usr/local/bin/composer
# on installe et configure les extensions PHP souhaitées
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
# On se place dans le répertoire de publication d'Apache
WORKDIR /var/www/
VOLUME ["/var/www/html","/var/log/apache2","/etc/apache2/sites-enabled"]

Enfin le vhost d’Apache :

<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>

et le fichier index.php

<?php phpinfo(); >

Testez !