Aller au contenu principal

Utiliser Docker init pour dockeriser rapidement votre application PHP

Dockerisez rapidement votre application PHP avec Apache grâce à la commande docker init. Cet outil sous forme d'assistant génère les fichiers Docker nécessaires et montre comment intégrer une base de données de façon sécurisée.

· 6 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Utiliser Docker init pour dockeriser rapidement votre application PHP

⚡
TL;DR

Apprenez à dockeriser rapidement une application PHP et Apache existante avec la commande docker init. Ce guide vous fait passer par l'assistant interactif qui génère automatiquement vos fichiers Dockerfile, compose.yaml et .dockerignore. La démonstration s'appuie sur un script PHP d'exemple, montre comment lancer l'application fraîchement containerisée et explique le rôle de chaque fichier généré. L'article donne aussi une astuce pour étendre la configuration et ajouter un service de base de données de manière sécurisée avec les Docker Secrets.

Et si on demandait à Docker de créer lui-même les fichiers dont il a besoin ?

Si vous lisez régulièrement ce blog, vous savez désormais qu'il faut un Dockerfile pour décrire comment l'image Docker doit être créée et ce qu'elle doit contenir, et très souvent il vous faut aussi un fichier compose.yaml pour expliquer comment le container doit être créé : quel port mapper, quels volumes utiliser, etc.

Imaginez que vous avez une application PHP existante et que vous n'avez pas envie de créer à la main les fichiers nécessaires à la dockerisation.

Vous voulez juste, très vite et via un assistant, répondre à quelques questions et hop, c'est prêt.

La commande docker init est exactement ce que vous cherchez. Je l'avais déjà essayée une première fois, à l'époque où le support de PHP venait d'arriver, dans Docker init supporte maintenant PHP ; cet article y revient sur une vraie application.

Récupérer les scripts​

À titre d'illustration, je vais utiliser mon projet aeSecure - QuickScan - Scanner de virus gratuit déjà présenté sur ce blog.

Il s'agit d'une application web qui analyse des fichiers (un site local) à la recherche de motifs pouvant indiquer la présence d'un virus.

Donc, pour faire tourner aeSecure QuickScan, il nous faut PHP et Apache.

C'est parti...

D'abord, on crée un dossier temporaire et on récupère une copie du script :

>user@machine: ~/yourproject

Vous avez maintenant une version locale du script. C'est un unique script index.php ; rien de plus à ce stade.

La commande docker init​

Vos valeurs pour cette page
défaut
S'applique aux commandes de cette pageEnregistré uniquement sur cet appareil

Lancez simplement docker init dans la console :

Starting docker init

Comme on le voit, Docker init a déjà détecté la présence d'un fichier PHP et propose donc PHP with Apache. Parfait, appuyez sur Enter.

La question suivante porte sur la version de PHP : saisissez celle que vous voulez (par exemple 8.2) et appuyez sur Enter.

La troisième question porte sur le chemin relatif à utiliser pour le projet. Dans notre cas, le script PHP se trouve à la racine du projet (et pas dans /app par exemple), donc appuyez simplement sur Enter.

Vous devez ensuite indiquer quel port sera utilisé pour l'application ; j'utilise le port 8080 mais vous pouvez prendre celui que vous voulez (du moment qu'il est libre).

Et voilà.

Docker init has created our files

C'est trop simple, non ? Essayons les commandes suggérées et voyons si le site fonctionne vraiment.

D'abord, créez le container en exécutant la commande docker compose up --build puis, une fois terminé, ouvrez votre navigateur et rendez-vous sur votre site local (dans mon cas http://localhost:8080) et ...

http://localhost:8080
The application is running

Regardons les fichiers créés​

Le fichier .dockerignore​

Le fichier .dockerignore indique les fichiers et répertoires à exclure des builds Docker. Ainsi, lors de la création d'une image Docker, vous ne voulez certainement pas, par exemple, que le dossier .git soit copié dans l'image. Ce dossier (et bien d'autres) doit rester sur la machine.

En ouvrant ce fichier avec un éditeur de code, vous verrez cette ligne :

**/.git

Ce fichier .gitignore indique à Git d'ignorer complètement le répertoire .git et son contenu. C'est une configuration standard pour éviter que Git ne suive sa propre structure interne, ce qui causerait des problèmes de versioning.

Voyez https://docs.docker.com/go/build-context-dockerignore/ pour plus d'explications.

Le fichier compose.yaml​

Remarque

Auparavant, le fichier s'appelait docker-compose.yaml (ou docker-compose.yml).

Ce fichier explique à Docker comment faire fonctionner ensemble plusieurs containers, par exemple notre application PHP et un service de base de données.

En ouvrant le fichier, vous verrez que pour l'instant, les seules lignes non commentées sont celles-ci :

services:
server:
build:
context: .
ports:
- 8080:80

Ce fichier Docker Compose définit un service appelé 'server' qui construit une image Docker à partir du contexte courant et expose le port 8080 de la machine hôte sur le port 80 du conteneur.

Le reste est juste là à titre d'illustration.

Voyez https://docs.docker.com/go/compose-spec-reference/ pour plus d'explications.

Le fichier Dockerfile​

Il y a beaucoup de lignes commentées ; si on regarde les lignes non commentées, on obtient ceci :

FROM php:8.2-apache
COPY . /var/www/html
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
USER www-data

Ce Dockerfile construit une image Docker basée sur PHP 8.2 avec Apache. Il copie le code source dans le répertoire de l'application web, configure PHP pour la production, et change l'utilisateur d'exécution pour des raisons de sécurité.

On va donc utiliser l'image Docker PHP 8.2 livrée avec Apache (une seule image contenant PHP et Apache).

On copie tous les fichiers de notre projet (souvenez-vous, notre projet est stocké dans le dossier /tmp/aesecure_quickscan) dans le dossier /var/www/html de l'image. Tous les fichiers ? Non, c'est inexact. Rappelez-vous le fichier .dockerignore : on copie tous les fichiers qui n'y sont pas mentionnés.

Docker se charge aussi de renommer le fichier standard php.ini-production en php.ini.

La dernière commande sert à basculer vers l'utilisateur www-data (ainsi le container ne tournera pas en tant que root).

Voyez https://docs.docker.com/go/dockerfile-reference/ pour plus d'explications.

Le fichier README.Docker.md​

Comme pense-bête sur la façon d'utiliser votre application dockerisée, ce fichier vous donne les commandes essentielles à exécuter.

Les fichiers générés vous appartiennent​

Les fichiers générés ne seront pas modifiés par Docker tant que vous ne relancez pas docker init. Autrement dit, vous pouvez y apporter toutes les modifications que vous voulez sans les perdre. C'est une excellente façon de dockeriser rapidement une application.

L'exemple donné dans cet article est un projet autonome, donc docker init fait toute la magie. Si nous avions eu besoin d'une base de données, il aurait suffi de revenir au fichier compose.yaml et de décommenter les lignes ci-dessous :

services:
server:
build:
context: .
ports:
- 8080:80
depends_on:
db:
condition: service_healthy
db:
image: postgres
restart: always
user: postgres
secrets:
- db-password
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=example
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
expose:
- 5432
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
secrets:
db-password:
file: db/password.txt

Ce fichier Docker Compose définit deux services : un serveur web qui se construit à partir du répertoire courant et expose le port 8080, et une base de données PostgreSQL qui démarre toujours et reste saine grâce à des vérifications régulières. Le serveur attend que la base de données soit prête avant de démarrer, et les deux services partagent un volume persistant et des secrets pour gérer les données sensibles.

Les Docker secrets sont utilisés ici

Hé ! Vous avez vu ? Au lieu d'écrire le mot de passe en dur dans le fichier, docker init a utilisé un secret. C'est malin.

Lisez mon article Docker secrets - Using your SSH key during the build process si vous ne savez pas ce qu'est un secret

Pour que l'exemple ci-dessus fonctionne, créez simplement un dossier db avec dedans un fichier password.txt et collez-y le mot de passe de votre base de données.

Bien sûr, les fichiers générés par docker init ne sont que des squelettes : vous pouvez changer ce que vous voulez. Donc si vous ne souhaitez pas utiliser les secrets, pas de souci, vous pouvez écrire le mot de passe en dur ; c'est vous qui voyez.


Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?