Comment installer Wordpress et PhpMyAdmin avec Docker Compose sur Ubuntu 14.04

introduction

Docker Compose facilite grandement la gestion des processus d'orchestration des conteneurs Docker (tels que le démarrage, l'arrêt et la configuration de la liaison et des volumes intra-conteneur).

Cet article fournit un exemple concret d'utilisation de Docker Compose pour installer une application, dans ce cas, WordPress avec PHPMyAdmin en option. WordPress fonctionne normalement sur une pile LAMP, ce qui signifie Linux, Apache, MySQL / MariaDB et PHP. L'image officielle de WordPress Docker inclut Apache et PHP pour nous, donc le seul élément dont nous devons nous préoccuper est MariaDB.

Conditions préalables

Pour suivre cet article, vous aurez besoin des éléments suivants:

[[step-1 -—- Installing-wordpress]] == Étape 1 - Installation de WordPress

Nous utiliserons les images Docker officielles dehttps://hub.docker.com//wordpress/[WordPress] and https://hub.docker.com/ / mariadb / [MariaDB]. Si vous êtes curieux, vous trouverez de nombreuses autres informations sur ces images et leurs options de configuration sur leurs pages respectives GitHub et Docker Hub.

Commençons par créer un dossier dans lequel nos données vivront et créer un fichierdocker-compose.yml minimal pour exécuter notre conteneur WordPress:

mkdir ~/wordpress && cd $_

Ensuite, créez un~/wordpress/docker-compose.yml avec votre éditeur de texte préféré (nano est facile si vous n’avez pas de préférence):

nano ~/wordpress/docker-compose.yml

et collez ce qui suit:

~/wordpress/docker-compose.yml

wordpress:
  image: wordpress

Cela indique simplement à Docker Compose de démarrer un nouveau conteneur appeléwordpress et de télécharger l'imagewordpress à partir du Docker Hub.

Nous pouvons afficher l'image comme suit:

docker-compose up

Vous verrez Docker télécharger et extraire l'image WordPress du concentrateur Docker, et après un certain temps, vous recevrez des messages d'erreur similaires à ceux-ci:

Outputwordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

WordPress se plaint de ne pas trouver de base de données. Ajoutons une image MariaDB au mélange et relions-la pour résoudre ce problème.

[[step-2 -—- Installing-mariadb]] == Étape 2 - Installation de MariaDB

Pour ajouter l'image MariaDB au groupe, rouvrezdocker-compose.yml avec votre éditeur de texte:

nano ~/wordpress/docker-compose.yml

Modifiezdocker-compose.yml pour qu'il corresponde à ce qui suit (soyez prudent avec l'indentation, les fichiers YAML sont sensibles aux espaces)

docker-compose.yml

wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
wordpress_db:
  image: mariadb

Ce que nous avons fait ici est de définir un nouveau conteneur appeléwordpress_db et de lui dire d'utiliser l'imagemariadb du Docker Hub. Nous avons également dit à notre conteneurwordpress de lier notre conteneurwordpress_db au conteneurwordpress et de l'appelermysql (à l'intérieur du conteneurwordpress le nom d'hôtemysql) s seront transférés vers notre conteneurwordpress_db).

Si vous exécutez à nouveaudocker-compose up, vous le verrez télécharger l'image MariaDB, et vous verrez également que nous n'en sommes pas encore tout à fait là:

Outputwordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    |
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

WordPress se plaint toujours de l'impossibilité de trouver une base de données, et nous avons maintenant une nouvelle plainte de MariaDB disant qu'aucun mot de passe root n'est défini.

Il semble que le simple fait de relier les deux conteneurs ne suffit pas. Allons-y et définissons la variableMYSQL_ROOT_PASSWORD afin que nous puissions réellement déclencher cette chose.

Editez le fichier Docker Compose encore une fois:

nano ~/wordpress/docker-compose.yml

Ajoutez ces deux lignes auxend de la sectionwordpress_db, maismake sure to change examplepass to a more secure password!

docker-compose.yml

wordpress_db:
...
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
...

Cela définira une variable d'environnement dans le conteneurwordpress_db appeléMYSQL_ROOT_PASSWORD avec le mot de passe souhaité. L'image MariaDB Docker est configurée pour vérifier cette variable d'environnement au démarrage et se chargera de configurer la base de données avec un compte root avec le mot de passe défini commeMYSQL_ROOT_PASSWORD.

Pendant que nous y sommes, définissons également une redirection de port afin que nous puissions nous connecter à notre installation WordPress une fois qu’elle se charge réellement. Dans la sectionwordpress, ajoutez ces deux lignes:

docker-compose.yml

wordpress:
...
  ports:
    - 8080:80
...

Le premier numéro de port est le numéro de port de l'hôte et le deuxième numéro est le port à l'intérieur du conteneur. Ainsi, cette configuration transfère les demandes sur le port 8080 de l'hôte au port de serveur Web par défaut 80 à l'intérieur du conteneur.

[.note] #Note: Si vous souhaitez que Wordpress s'exécute sur le port 80 par défaut du serveur Web sur l'hôte, remplacez la ligne précédente par80:80 afin que les demandes sur le port 80 de l'hôte soient transmises à port 80 à l'intérieur du conteneur Wordpress.
#

Votre fichierdocker-compose.yml complet devrait maintenant ressembler à ceci:

docker-compose.yml

wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass

Avec cette configuration, nous pouvons réellement lancer WordPress. Cette fois, exécutons-le avec l'option-d, qui dira àdocker-compose d'exécuter les conteneurs en arrière-plan afin que vous puissiez continuer à utiliser votre terminal:

docker-compose up -d

Vous verrez tout un tas de texte défiler sur votre écran. Une fois calmé, ouvrez un navigateur Web et accédez aux IP
de votre boîtier DigitalOcean sur le port 8080 (par exemple, si l'adresse IP de votre serveur est123.456.789.123, vous devez taperhttp://123.456.789.123:8080) s dans votre navigateur.)

Vous devriez voir une nouvelle page d’installation de WordPress et pouvoir terminer l’installation et bloguer comme d’habitude.

Étant donné que ce sont deux images Docker officielles et qu'elles suivent toutes les meilleures pratiques de Docker, chacune de ces images a des volumes persistants prédéfinis pour vous - ce qui signifie que si vous redémarrez le conteneur, vos articles de blog seront toujours là. Vous pouvez en savoir plus sur l'utilisation des volumes Docker dans le fichierDocker data volumes tutorial.

[[step-3 -—- ajoutant-a-phpmyadmin-container]] == Étape 3 - Ajout d'un conteneur PhpMyAdmin

Génial, c'était relativement indolore. Essayons d’obtenir un peu de fantaisie.

Jusqu’à présent, nous n’utilisons que des images officielles, que l’équipe Docker s’efforce de mettre au point. Vous avez peut-être remarqué que nous n’avions pas à donner au conteneur WordPress de variables d’environnement pour le configurer. Dès que nous l'avons associé à un conteneur MariaDB correctement configuré, tout a bien fonctionné.

En effet, il existe un script dans le conteneur Docker de WordPress qui récupère la variableMYSQL_ROOT_PASSWORD de notre conteneurwordpress_db et l'utilise pour se connecter à WordPress.

Sortons un peu de la zone d'image officielle et utilisons uncommunity contributed PhpMyAdmin image. Allez-y et modifiezdocker-compose.yml une fois de plus:

nano docker-compose.yml

Collez ce qui suit à la fin du fichier:

docker-compose.yml

phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

Assurez-vous de remplacerexamplepass par le même mot de passe root que celui du conteneurwordpress_db que vous avez configuré précédemment.

Cela saisitdocker-phpmyadmin par le membre de la communautécorbinu, le lie à notre conteneurwordpress_db avec le nommysql (signifiant de l'intérieur des références du conteneurphpmyadmin au nom d'hôtemysql sera transféré vers notre conteneurwordpress_db), expose son port 80 sur le port 8181 du système hôte et définit enfin quelques variables d'environnement avec notre nom d'utilisateur et notre mot de passe MariaDB. Cette image ne récupère pas automatiquement la variable d'environnementMYSQL_ROOT_PASSWORD de l'environnement du conteneurwordpress_db comme le fait l'imagewordpress. Nous devons en fait copier la ligneMYSQL_ROOT_PASSWORD: examplepass du conteneurwordpress_db et définir le nom d'utilisateur surroot.

Le fichierdocker-compose.yml complet devrait maintenant ressembler à ceci:

docker-compose.yml

wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

Maintenant, redémarrez le groupe d'applications:

docker-compose up -d

Vous verrez que PhpMyAdmin est en cours d'installation. Une fois l’opération terminée, visitez à nouveau l’adresse IP de votre serveur (cette fois en utilisant le port 8181, par exemple. http://123.456.789.123:8181). Vous serez accueilli par l’écran de connexion PhpMyAdmin.

Allez-y et connectez-vous en utilisant le nom d'utilisateurroot et le mot de passe que vous avez définis dans le fichier YAML, et vous pourrez parcourir votre base de données. Vous remarquerez que le serveur comprend une base de donnéeswordpress, qui contient toutes les données de votre installation WordPress.

Vous pouvez ajouter autant de conteneurs que vous le souhaitez et les lier de la manière qui vous convient. Comme vous pouvez le voir, l'approche est assez puissante - au lieu de traiter la configuration et les prérequis pour chaque composant individuel et de les configurer tous sur le même serveur, vous pouvez connecter les pièces comme des blocs Lego et ajouter des composants au coup par coup. En utilisant des outils commeDocker Swarm, vous pouvez même exécuter ces conteneurs de manière transparente sur plusieurs serveurs! C’est un peu en dehors de la portée de ce tutoriel. Docker fournit quelques [documentation]https://docs.docker.com/swarm/install-w-machine/ dessus si vous êtes intéressé.

[[step-4 -—- creation-the-wordpress-site]] == Étape 4 - Création du site WordPress

Tous les fichiers de votre nouveau site WordPress étant stockés dans votre conteneur Docker, qu'advient-il de vos fichiers lorsque vous arrêtez le conteneur et le redémarrez?

Par défaut, la racine du document pour le conteneur WordPress est persistante. Cela est dû au fait que l’image WordPress du Docker Hub est configurée de cette façon. Si vous apportez une modification à votre site WordPress, arrêtez le groupe d'applications et redémarrez-le, votre site Web conservera les modifications apportées.

Essayons.

Accédez à votre WordPress à partir d’un navigateur Web (par exemple, http://123.456.789.123:8080). Modifiez le post deHello World! qui existe déjà. Arrêtez ensuite tous les conteneurs Docker avec la commande suivante:

docker-compose stop

Essayez de recharger le site WordPress. Vous verrez que le site Web est en panne. Relancez les conteneurs Docker:

docker-compose up -d

Encore une fois, chargez le site WordPress. Vous devriez voir votre site de blog et les modifications que vous avez apportées précédemment. Cela montre que les modifications que vous apportez sont enregistrées même lorsque les conteneurs sont arrêtés.

[[step-5 -—- storing-the-document-root-on-the-host-filesystem-optional]] == Étape 5 - Stockage de la racine du document sur le système de fichiers hôte (facultatif)

Il est possible de stocker la racine du document pour WordPress sur le système de fichiers hôte à l'aide d'un volume de données Docker pour partager des fichiers entre l'hôte et le conteneur.

[.note] #Note: Pour plus de détails sur l'utilisation des volumes de données Docker, jetez un œil auxDocker data volumes tutorial.
#

Essayons. Ouvrez encore une fois votre fichierdocker-compose.yml:

nano ~/wordpress/docker-compose.yml

dans la sectionwordpress:, ajoutez les lignes suivantes:

~/wordpress/docker-compose.yml

wordpress:
...
  volumes:
    - ~/wordpress/wp_html:/var/www/html
    ...

Arrêtez votre sessiondocker-compose en cours d’exécution:

docker-compose stop

Supprimez le conteneur existant afin que nous puissions mapper le volume sur le système de fichiers hôte:

docker-compose rm wordpress

Relancez WordPress:

docker-compose -d

Une fois l'invite renvoyée, WordPress devrait être à nouveau opérationnel - cette fois en utilisant le système de fichiers hôte pour stocker la racine du document.

Si vous regardez dans votre répertoire~/wordpress, vous verrez qu'il y a maintenant un répertoirewp_html dedans:

ls ~/wordpress

Tous les fichiers source WordPress sont à l'intérieur. Les modifications que vous apportez seront captées par le conteneur WordPress en temps réel.

Cette expérience a été un peu plus fluide qu'elle ne le serait normalement - le conteneur WordPress Docker est configuré pour vérifier si/var/www/html est vide ou non au démarrage et y copie les fichiers de manière appropriée. Habituellement, vous devrez faire cette étape vous-même.

Conclusion

Vous devriez avoir un déploiement complet de WordPress opérationnel. Vous devriez pouvoir utiliser la même méthode pour déployer une grande variété de systèmes en utilisant les images disponibles sur le hub Docker. Assurez-vous de déterminer quels volumes sont persistants et lesquels ne sont pas pour chaque conteneur que vous
créez.

Joyeux dockering!

Related