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 !