<!--
  canonical-url: https://www.avonture.be/fr/blog/docker-wordpress
  published:     2023-12-28
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# Installer rapidement WordPress en seulement trois commandes

> Installez un site WordPress complet avec Docker en seulement trois commandes simples. Apprenez à mettre en place le réseau, la base de données (MySQL/MariaDB) et le container WordPress rapidement et facilement.

---
![Installer rapidement WordPress en seulement trois commandes](/img/v2/wordpress.webp)

**TL;DR**

Cet article monte un site WordPress complet avec de simples commandes `docker run` plutôt qu'un `compose.yaml` : créer un réseau partagé, démarrer un container MySQL/MariaDB avec la base et l'utilisateur WordPress préconfigurés via des variables d'environnement, puis démarrer le container WordPress pointant vers cette base — trois commandes pour un site fonctionnel sur `http://127.0.0.1:8080`, plus un container phpMyAdmin optionnel pour accéder à la base.

Vous pensez qu'il est possible de lancer un nouveau site WordPress en seulement trois commandes ? Impossible, non ? Eh bien, si, c'est possible.

Voyons cela...

## Trois commandes, un site WordPress {#three-commands-one-wordpress-site}

Les voici, en entier :

```bash
$ docker network create wordpress

$ docker run -d --name db_wordpress --hostname db_wordpress --network wordpress -e MYSQL_RANDOM_ROOT_PASSWORD=1 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=example mysql:8.4

$ docker run -d --name app_wordpress --hostname app_wordpress --network wordpress -p 8080:80 -e WORDPRESS_DB_HOST=db_wordpress -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_PASSWORD=example wordpress:php8.3-apache
```

Rendez-vous sur `http://127.0.0.1:`8080 et WordPress vous accueille avec son assistant d'installation :

> Screenshot — http\://127.0.0.1:8080
>
> ![Running WordPress](./images/run_wp.webp)

> Screenshot — http\://127.0.0.1:8080
>
> ![Installing WordPress](./images/installing_wordpress.webp)

> **Error establishing a database connection:**
>
> Si vous obtenez `Error establishing a database connection`, patientez un peu avant de rafraîchir la page. Cela signifie que MySQL / MariaDB n'était pas encore prêt à accepter la connexion.

Pas de `compose.yaml`, pas de `wp-config.php` à éditer : un réseau partagé permet aux deux containers de communiquer, et chaque réglage dont WordPress a besoin est passé comme variable d'environnement sur la ligne de commande.

Dans l'article [Créez votre site Joomla avec Docker](/blog/docker-joomla), nous avons appris que dès que nous avons besoin de plus d'un service Docker (php/apache ainsi que mysql), il nous faut un fichier `compose.yaml`. C'est vrai et c'est la façon la plus simple de gérer l'application sur le long terme — mais pour un site jetable, lancer les containers à la main fonctionne tout aussi bien. Regardons ces trois commandes une par une.

## Première étape, il nous faut un réseau {#first-step-we-need-a-network}

Utiliser un réseau permettra aux containers de communiquer entre eux (voir [Using Docker network and the extra\_hosts property](/blog/docker-network-and-extra-hosts) pour les détails).

> **Vous avez besoin d'un réseau, ne sautez pas cette étape:**
>
> Dès que vous avez deux containers ou plus, vous avez besoin d'un réseau.

Créons notre réseau. Copiez/collez la commande ci-dessous dans un terminal (DOS ou Linux) et exécutez-la.

```bash
$ docker network create wordpress
```

## Deuxième étape, il nous faut un container de base de données {#second-step-we-need-a-database-container}

Pour cet article, je propose d'utiliser MySQL 8.x ou, si vous préférez, MariaDB 11.x. Choisissez celui que vous préférez et exécutez la commande dans un terminal.

Pour MySQL 8.x :

```bash
$ docker run -d --name db_wordpress --hostname db_wordpress --network wordpress -e MYSQL_RANDOM_ROOT_PASSWORD=1 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=example mysql:8.4
```

Pour MariaDB :

```bash
$ docker run -d --name db_wordpress --hostname db_wordpress --network wordpress -e MYSQL_RANDOM_ROOT_PASSWORD=1 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=example mariadb:11.4
```

Une fois démarré par Docker, le container MySQL / MariaDB va créer une base de données vide appelée `wordpress`, un utilisateur appelé `wpuser` dont le mot de passe sera `example` (tel que défini par nos variables `MYSQL_DATABASE`, `MYSQL_USER` et `MYSQL_PASSWORD`). Le container sera nommé db\_wordpress (comme défini par `--hostname`).

## Troisième étape, il nous faut WordPress {#third-step-we-need-wordpress}

Et maintenant, il nous faut un second container pour WordPress lui-même. Je propose d'utiliser la dernière version disponible à ce moment :

```bash
$ docker run -d --name app_wordpress --hostname app_wordpress --network wordpress -p 8080:80 -e WORDPRESS_DB_HOST=db_wordpress -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_PASSWORD=example wordpress:php8.3-apache
```

Cette commande lance WordPress dans un container Apache et rend le site accessible sur `http://127.0.0.1:`8080 — l'écran montré au début de cet article.

Le flag `-p ` 8080`:80` est le seul qui concerne votre machine hôte : changez le port s'il est déjà pris. Tous les autres décrivent comment WordPress atteint le container de base de données, par son `--hostname`, via le réseau `wordpress`.

## Optionnel, démarrer phpmyadmin {#optional-start-phpmyadmin}

Comme nous l'avons vu dans l'article [Using Adminer, pgadmin or phpmyadmin to access your Docker database container](/blog/docker-adminer-pgadmin-phpmyadmin), nous pouvons accéder à un container de base de données en utilisant par exemple phpMyAdmin. Pour cela, il suffit de lancer la commande suivante dans un terminal :

```bash
$ docker run -d --rm --network wordpress --name phpmyadmin -e PMA_HOST=db_wordpress -p 8089:80 phpmyadmin
```

En vous rendant sur `http://127.0.0.1:8089`, vous pouvez vous connecter à la base de données. Les identifiants à utiliser pour la connexion sont `wpuser` / `example`.

> Screenshot — http\://127.0.0.1:8089
>
> ![phpmyadmin](./images/phpmyadmin.webp)

## Supprimer les containers {#remove-containers}

Si vous souhaitez arrêter et supprimer les containers après usage, vous pouvez exécuter le bloc d'instructions suivant dans un terminal Linux :

```bash
$ docker rm $(docker stop $(docker ps -a -q --filter="name=app_wordpress"))

$ docker rm $(docker stop $(docker ps -a -q --filter="name=db_wordpress"))

$ docker network rm wordpress
```

Ou, à la main, allez dans votre interface `Docker Desktop`, cliquez sur l'onglet `containers` et supprimez les containers manuellement.

## Conclusion {#conclusion}

Comme annoncé, il nous faut juste trois commandes pour créer, de zéro, un nouveau site WordPress sur notre disque. Cela prend quelques secondes (selon la vitesse de votre ordinateur). Facile, non ?

Gardez à l'esprit que tout ici vit dans les containers : le jour où vous lancez les commandes de suppression ci-dessus, le site disparaît. Si vous voulez qu'il survive, la prochaine chose à ajouter est un [volume](/blog/docker-volume).
