Fabriquer votre image Docker avec Apache et PHP 8

Introduction

Cela ne vous aura probablement pas échappé, surtout si vous suivez l’actualité du PHP, mais la version 8 de PHP est sortie le 26 novembre 2020 ! Nous n’allons pas ici détailler tous les ajouts de cette version, d’autres ont déjà écrit d’excellents articles sur le sujet que vous n’aurez pas de mal à trouver.

Alors même si nous n’allons pas migrer nos serveurs de production vers cette nouvelle version tout de suite, il peut être intéressant de faire des tests, au moins sur nos postes de travail dans un premier temps. Et quoi de mieux qu’une image Docker avec Apache et PHP 8.0 pour faire des tests ?

À l’heure ou j’écris cet article, le dépôt PHP sur le hub Docker ne propose pas encore d’image avec PHP 8.0 (mais ça ne devrait pas tarder !), c’est donc l’occasion de voir ensemble comment nous pouvons construire cela nous même.

Récupération et adaptation d’un Dockerfile avec Apache et PHP

Si vous lisez cet article c’est que vous vous intéressez un tant soi peu à l’informatique, au développement ou à l’administration système, et donc, vous devez tout comme moi être flemmard ;-). Je veux dire que si quelques choses existe déjà, autant ne pas ré-inventer la roue !

Récupérons donc les fichiers de références pour la fabrication des images Docker de PHP.

git clone https://github.com/docker-library/php.git

Ouvrons ce répertoire dans notre éditeur de code favoris (j’utilise VSCode pour ma part).

cd php
code .

Nous allons nous baser et modifier les sources permettant de fabriquer l”image Docker avec PHP 8.0-rc. RDV dans le répertoire php/8.0-rc/buster/apache et éditons-le Dockerfile. Nous allons modifier les lignes 124, 125 et 126.

Avant modifications :

ENV PHP_VERSION 8.0.0RC5
ENV PHP_URL="https://downloads.php.net/~carusogabriel/php-8.0.0RC5.tar.xz" PHP_ASC_URL="https://downloads.php.net/~carusogabriel/php-8.0.0RC5.tar.xz.asc"
ENV PHP_SHA256="fa2e98d8b42e497a45f491c4714f0a67f7d817ff2f7ab9aad09efb72d2a8c60b"

Récupérons les informations de la version 8.0.0 de PHP sur le site officiel de PHP (https://www.php.net/downloads.php) et modifions les lignes en conséquences.

Après modifications :

ENV PHP_VERSION 8.0.0
ENV PHP_URL="https://www.php.net/distributions/php-8.0.0.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-8.0.0.tar.xz.asc"
ENV PHP_SHA256="b5278b3eef584f0c075d15666da4e952fa3859ee509d6b0cc2ed13df13f65ebb"

Build de l’image Docker

Le Dockerfile décrivant notre futur image Docker étant prêt, il ne nous reste plus qu’a faire un Build de l’image.

Positionnons-nous dans le bon répertoire avec notre shell.

cd 8.0-rc/buster/apache/

Et lançons le build.

docker build .

Donnons un nom et un tag à notre image (à personnaliser !).

Syntaxe : docker tag {id du build} {vous}/{nom de votre image}:{Version}

docker tag df66d1b9cd9b yoanbernabeu/php8.0:1.0

Utiliser cette image

Maintenant que nous avons cette image, il ne reste plus qu’à l’utiliser pour vérifier que tout est OK. Pour cela nous allons utiliser un “stack” Docker Compose existante, et la modifier pour utiliser cette nouvelle image.

git clone https://gitlab.com/yoandev.co/environnement-de-developpement-symfony-5-avec-docker-et-docker-compose.git
cd environnement-de-developpement-symfony-5-avec-docker-et-docker-compose/
code .

Modifions le fichier docker-compose.yml, en particulier le service “www”.

    www:
        image: yoanbernabeu/php8.0:1.0
        container_name: www_docker_symfony
        ports:
          - "8741:80"
        volumes:
            - ./php/vhosts:/etc/apache2/sites-enabled
            - ./:/var/www
        restart: always
        networks:
            - dev

Démarrons les conteneurs.

docker-compose up -d

Créons un simple fichier index.php avec phpinfo() pour vérifier notre configuration (dans un répertoire project/pucblic tel qu’attendue dans cette configuration).

mkdir project
mkdir project/public
cd project/public
touch index.php

Éditons le fichier index.php en y ajoutant un phpinfo().

<?php

phpinfo();

Et vérifions que tout est OK sur http://127.0.0.1:8741/

Conclusion et dépôt GitLab

L’occasion était trop belle de voir une nouvelle fois comment il est simple de fabriquer ces propres images pour Docker. Vous devriez maintenant avoir les éléments de base nécessaire pour comprendre comment fonctionne les images Docker, et je vous invite d’ailleurs à faire ce travail lorsque vous compter utiliser une image en production, histoire de savoir ce qu’elle fait exactement !

Vous trouverez les fichiers nécessaires à la fabrication de cette image dans ce dépôt GitLab.

Bonus : Mise à disposition de l’image sur le hub Docker

Si vous ne souhaitez pas vous prendre la tête, et que vous voulez juste tester PHP 8.0, j’ai mis l’image à disposition sur le hub Docker: https://hub.docker.com/r/yoanbernabeu/php8.0

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.