Agence web » Actualités du digital » Comment utiliser Docker pour conteneuriser PHP et Apache –

Comment utiliser Docker pour conteneuriser PHP et Apache –

Les conteneurs Docker rendent votre application portable dans tous les environnements. Une fois que vous avez une image de conteneur, vous pouvez l’utiliser partout où Docker est disponible. Voici comment conteneuriser une application Web PHP à l’aide du serveur Apache.

Nous utiliserons l’image officielle de PHP Docker comme base. Des variantes préconfigurées avec Apache sont fournies, vous n’aurez donc pas besoin d’installer le serveur Web vous-même. L’image de base PHP offre également des utilitaires pratiques pour gérer les extensions PHP.

Créer un Dockerfile

Les images Docker sont créées à partir d’un Dockerfile. Ce fichier contient des instructions qui sont utilisées pour construire l’image. Les instructions comprennent COPY, pour copier des fichiers et des dossiers dans le conteneur, et RUN, qui exécute une commande dans le conteneur.

Vous pouvez faire fonctionner un simple site PHP en copiant simplement ses fichiers dans une image basée sur php:8.0-apache.

FROM php:8.0-apache
WORKDIR /var/www/html

COPY index.php index.php
COPY src/ src
EXPOSE 80

Cette Dockerfile prend index.php et src à partir de notre répertoire de travail et les copie dans la racine du document Apache. Vous pouvez maintenant créer l’image et démarrer un conteneur à partir de celle-ci. Vous verriez votre site servi par Apache.

docker build -t my-php-site:latest .
docker run -d -p 80:80 my-php-site:latest

Les images PHP Docker ont la racine du document Apache à l’emplacement par défaut Debian de /var/www/html. le WORKDIR instruction dans le Dockerfile signifie que les commandes suivantes seront exécutées dans la racine du document.

Apache s’expose sur le port de serveur Web par défaut de 80. Le EXPOSE directive dans le Dockerfile l’indique. En exposant explicitement le port, vous pouvez utiliser le -P drapeau avec docker run pour lier automatiquement un port hôte aléatoire au port 80 du conteneur.

Personnalisation de la configuration Apache

Les images officielles PHP / Apache sont basées sur Debian. Vous pouvez utiliser le apt gestionnaire de paquets pour ajouter les logiciels supplémentaires dont vous avez besoin.

Vous avez également un accès complet aux outils intégrés d’Apache. Vous pouvez utiliser a2enmod/a2dismod pour gérer les modules et a2ensite/a2dissite pour interagir avec des hôtes virtuels.

Le fichier de configuration Apache est par défaut /etc/apache2/apache2.conf. Ajoutez des lignes à ce fichier, ou remplacez-le entièrement, pour étendre la configuration Apache.

Un changement qui vaut toujours la peine d’être fait est de définir explicitement Apache ServerName. Cela arrête l’avertissement «Impossible de déterminer de manière fiable ServerName» qui apparaît généralement dans les journaux de votre conteneur.

Vous souhaiterez également généralement ajouter votre propre hôte virtuel Apache. Cela vous permet de configurer une configuration personnalisée au-delà de ce qu’Apache 000-default le site fournit. Voici comment effectuer ces modifications.

COPY my-apache-site.conf /etc/apache2/sites-available/my-apache-site.conf

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&
    a2enmod rewrite &&
    a2dissite 000-default &&
    a2ensite my-apache-site &&
    service apache2 restart

Cet exemple désactive le site par défaut, active le site personnalisé et redémarre Apache pour appliquer les modifications. le mod_rewrite le module est également activé, permettant l’utilisation de Rewrite directives dans .htaccess des dossiers. Vous pouvez également activer d’autres modules, tels que headers si votre configuration interagit avec les en-têtes de réponse.

Ajouter des extensions PHP

Les images PHP Docker sont livrées avec des utilitaires de gestion d’extensions intégrés. Certaines extensions sont activées par défaut – vous pouvez vérifier ce qui est disponible en exécutant php -m dans un conteneur en cours d’exécution.

De nombreuses extensions courantes peuvent être installées en utilisant docker-php-ext-install:

docker-php-ext-install pdo_mysql

Certaines extensions doivent être configurées avant de pouvoir être installées. Vous pouvez utiliser docker-php-ext-configure pour effectuer la configuration de pré-installation. Les options disponibles varient selon l’extension. Lisez la page de manuel de l’extension pour déterminer les indicateurs que vous pouvez fournir.

RUN docker-php-ext-configure gd --with-jpeg=/usr/include/ &&
    docker-php-ext-install gd

Vous pouvez également utiliser des extensions distribuées via PECL. Ces extensions nécessitent une procédure d’installation en deux étapes. Installez d’abord le package PECL, puis utilisez docker-php-ext-enable pour enregistrer l’extension avec votre installation PHP.

RUN apt-get install -y libmcached-dev zlib1g-dev &&
    pecl install memcached-3.1.5 &&
    docker-php-ext-enable memcached

Configuration PHP

Les images Docker sont préconfigurées pour charger les fichiers de configuration PHP trouvés dans /usr/local/etc/php/conf.d. Ajouter votre propre .ini fichier dans ce répertoire. PHP inclura son contenu au moment de l’exécution, écrasant toutes les valeurs existantes. C’est la méthode recommandée pour étendre la configuration par défaut.

Le chemin du répertoire de configuration pourrait changer à l’avenir. Vous pouvez obtenir son emplacement actuel en utilisant le $PHP_INI_DIR variable d’environnement. Il se résout actuellement à /usr/local/etc/php/conf.d.

Utilisation de Composer

Composer n’est pas disponible par défaut. Composer est un effort communautaire qui existe indépendamment de PHP. Vous devez l’installer manuellement si vous souhaitez l’utiliser dans un conteneur Docker.

La meilleure façon d’utiliser Composer dans vos builds est de référencer la propre image Docker de l’outil via une build en plusieurs étapes. Utilisation COPY --from pour amener le binaire Composer dans votre conteneur PHP; vous pouvez ensuite utiliser Composer comme d’habitude pour installer les dépendances de votre projet.

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install --no-dev

L’utilisation de cette approche réduit la complexité. Vous n’avez pas besoin de télécharger et d’exécuter le script d’installation de Composer. En référençant composer:2, Docker extraira l’image, puis copiera le binaire Composer.

Scripts de point d’entrée personnalisés

Vous devrez peut-être utiliser un script de point d’entrée personnalisé si vous souhaitez exécuter des migrations d’applications avant le démarrage de l’exécution du serveur principal. Vous pouvez remplacer le conteneur ENTRYPOINT pour utiliser votre propre séquence de démarrage.

Vous pouvez faire en sorte que l’exécution du conteneur se poursuive normalement en exécutant apache2-foreground. Cela exécutera Apache au premier plan, empêchant le conteneur de se fermer une fois le script de point d’entrée terminé.

ENTRYPOINT ["bash", "/Docker.sh"]

Docker.sh Contenu:

php app.php my-migration-command    # run migrations
service cron start                  # start some services
exec apache2-foreground             # main execution

Conclusion

L’ancrage d’un service Web PHP est simple lors de l’utilisation des images officielles. Vous pouvez facilement configurer Apache et PHP avec des extensions et vos propres fichiers de configuration.

Vous êtes le plus susceptible de rencontrer des difficultés lorsque vous essayez d’utiliser des addons de communauté tiers tels que Composer. Ceux-ci ne sont pas inclus par défaut, vous devrez donc utiliser des builds Docker en plusieurs étapes ou des procédures d’installation manuelle.

L’utilisation de Docker donne à votre application une polyvalence quant à la manière et au lieu de son déploiement. Avec votre image, vous pouvez lancer une installation fonctionnelle de votre site en utilisant uniquement docker build et docker run dans votre terminal.

★★★★★