Maison >Tutoriel CMS >WordPresse >Comment construire manuellement les conteneurs Docker pour WordPress

Comment construire manuellement les conteneurs Docker pour WordPress

Lisa Kudrow
Lisa Kudroworiginal
2025-02-17 13:03:101005parcourir

Comment construire manuellement les conteneurs Docker pour WordPress

Dans mon article précédent, nous avons couvert ce qu'est Docker et comment se lancer avec quelques commandes. Cependant, nous n'avons encore rien fait d'utile. Il existe de nombreuses façons d'obtenir un environnement WordPress en utilisant Docker, dans cet article, je vais vous montrer comment configurer manuellement les conteneurs Docker pour travailler avec WordPress. Si vous souhaitez une introduction rapide dans Docker, vous pouvez revenir au premier article ici.

Les plats clés

  • Docker peut être configuré manuellement pour travailler avec WordPress en créant des conteneurs pour MySQL et WordPress. Le conteneur MySQL est créé à l'aide d'une image MySQL à partir de Docker Hub, tandis que le conteneur WordPress est construit à partir d'une image PHP.
  • Le conteneur MySQL nécessite une variable environnementale à passer lors de la création pour la première fois, en définissant le mot de passe pour l'utilisateur racine. Des variables environnementales supplémentaires peuvent également être transmises au conteneur, telles que MySQL_Database, qui garantit une base de données avec ce nom créé.
  • L'image PHP pour le conteneur WordPress n'a pas l'extension MySQL installée par défaut. Cela peut être corrigé en construisant un conteneur via un dockerfile, qui utilise l'image PHP: 5.6-APACHE, installe l'extension mysqli et exécute Apache2-Foreground.
  • Le conteneur WordPress doit être lié au conteneur MySQL pour que la base de données fonctionne. Cela se fait en utilisant l'argument –Link lors de l'exécution du conteneur WordPress, avec le nom du conteneur MySQL comme première partie et un alias comme deuxième partie.
  • Il peut y avoir des problèmes avec les autorisations de fichiers et l'adresse IP du conteneur WordPress change chaque fois qu'elle est redémarrée. Ceux-ci peuvent être traités en modifiant le DockerFile pour inclure un fichier d'entrée.sh qui garantit un accès en écriture au système de fichiers du conteneur, et en ajoutant des lignes au fichier wp-config.php qui définit l'URL `` home '' et `` site '' comme serveur comme le serveur Adresse IP.

Configuration de mysql

Chaque installation WordPress a besoin d'une base de données MySQL. Pour ce faire, nous nous dirigeons vers Docker Hub et trouvons une image mysql.

L'équipe Docker a déjà une image MySQL prête à utiliser. Avant d'exécuter des commandes sur le terminal, assurez-vous de lire la documentation de cette image. La dernière version au moment de la rédaction est de 5,7. Cependant, le dernier nom de balise est 5.6. La dernière version d'une image peut être pour n'importe quelle version précédente, mais une dans son état stable.

Comment construire manuellement les conteneurs Docker pour WordPress

La commande de base pour configurer un conteneur à l'aide de cette image est:

docker run --name wordpressdb -d mysql:5.7
Comment construire manuellement les conteneurs Docker pour WordPress

Si vous n'avez pas déjà de copie de l'image localement, Docker tirera cela pour vous du Docker Hub. Nous savons jusqu'à présent que - Name donne un nom à notre conteneur, -d, nous assure que notre conteneur fonctionne en arrière-plan.

Si vous exécutez Docker PS, vous verrez que le conteneur WordPressDB n'est pas en cours d'exécution. Il devrait cependant fonctionner. Exécutez les journaux docker wordpressdb et vous verrez un message comme celui-ci:

docker run --name wordpressdb -d mysql:5.7

Pourquoi est-ce? C'est parce que nous n'avons pas passé de mot de passe racine comme argument lorsque nous avons construit le conteneur pour la première fois. Alors faisons exactement cela. Tout d'abord, nous devons supprimer le conteneur que nous avons créé avec le nom WordPressdb à l'aide de Docker RM WordPressdb. En effet, le nouveau conteneur utilisera le même nom et il ne peut pas y avoir deux conteneurs avec le même nom.

Alors, créons à nouveau notre conteneur. Nous devons passer une variable environnementale lorsque nous créons pour la première fois le conteneur. Cela devrait ressembler à ceci:

error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?

-e mysql_root_password = le mot de passe est une variable environnementale. Lorsque le conteneur est construit à partir de l'image, il lit cette variable et définit le mot de passe de l'utilisateur racine à la valeur spécifiée, qui dans ce cas est le mot de passe.

Si vous vérifiez maintenant les journaux Docker WordPressDB, vous verrez un très long message, mais ne vous inquiétez pas, cela fonctionne. Encore une fois, exécutez Docker PS et vous verrez un conteneur avec le nom wordpressdb qui est actif et en cours d'exécution.

Vous pouvez également transmettre d'autres variables environnementales à votre conteneur, vous pouvez trouver une liste complète sur la documentation d'image MySQL. Voici un autre exemple:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7

Si vous avez essayé de supprimer le conteneur précédent avec le nom wordpressdb, il a probablement échoué. C'est parce que le conteneur fonctionnait toujours en arrière-plan. Vous pouvez d'abord arrêter le conteneur en cours d'exécution, puis le supprimer ou simplement le retirer:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7

Si nous utilisons MySQL_DATABASE, il s'assure qu'une base de données avec ce nom est créée. De cette façon, nous savons avec certitude quel est le nom de la base de données et du mot de passe Roots. Vous pouvez également créer un autre utilisateur avec un mot de passe et une base de données. Voici un test rapide pour vous, regardez leurs documents et essayez de le faire vous-même.

Si vous souhaitez savoir comment ce conteneur est construit, regardez le dockerfile. Il utilise Debian Wheezy et construit le conteneur à l'aide de commandes bash. Il le tire du référentiel puis démarre MySQLD. Lorsque Building votre conteneur à partir de cette image, la première fois, il exécutera les commandes du fichier de construction. Lorsque en utilisant le conteneur, il ne fera que l'exécuter MySqld.

Comment construire manuellement les conteneurs Docker pour WordPress

Maintenant que nous avons un conteneur MySQL en cours d'exécution, nous pouvons exécuter un conteneur qui exécute WordPress.

Construire un conteneur WordPress

Pour ce conteneur, nous utiliserons l'image PHP. Il existe trois types d'images PHP, nous n'avons besoin que de l'image PHP qui vient avec Apache.

docker rm -f wordpressdb

sans option -d, il ne s'exécutera pas en arrière-plan, mais il vous montrera tout ce que fait le conteneur (de la même manière que Docker Logs [contener_name]).

À partir de la sortie, vous pouvez voir qu'il a automatiquement attribué une IP à ce conteneur. Dans mon cas, c'est 172.17.0.35. Si vous visitez cette adresse en utilisant votre navigateur, vous obtiendrez une erreur interdite. Pourquoi donc? C'est parce qu'il n'y a rien dans le dossier / var / www / html (sur le système de fichiers des conteneurs), c'est vide.

Alors, comment pouvons-nous mettre des fichiers dans ce dossier? Par défaut, ce dossier reste à l'intérieur du conteneur et il est invisible. Cependant, pas pour longtemps (n'oubliez pas de Docker RM WordPress). Tout d'abord, créez un dossier et naviguez à l'intérieur (n'oubliez pas de supprimer l'ancien conteneur WordPress).

docker run --name wordpressdb -d mysql:5.7

-v est utilisé pour cartographier deux dossiers. La première partie est le dossier de votre système d'exploitation et le second est le dossier du système de fichiers des conteneurs. Sur les systèmes de type Unix, le "$ PWD" renvoie l'emplacement où le terminal est lorsque la commande s'exécute. Lorsque vous démarrez un terminal pour la première fois, vous serez dans votre répertoire domestique. L'équivalent sur Windows est CD. Plus sur les personnes handicapées peuvent être trouvées ici.

Ainsi, dans notre exemple, la première partie est «$ pwd /», qui est le répertoire local et la deuxième partie est / var / www / html /. -v nécessite les deux pour être des chemins complets. Cependant, si nous regardons dans notre répertoire de travail, nous pouvons voir qu'il n'y a pas de fichiers. Créer un fichier appelé index.php qui contient les éléments suivants:

error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?

Vérifiez à nouveau ceci dans votre navigateur. Cette fois, vous remarquerez que l'adresse IP a changé car nous avons créé un nouveau conteneur. Chaque fois que nous créons un nouveau conteneur, il modifie son IP. Si vous voyez ce message dans votre navigateur, vous avez tout fait correctement.

Voyons ce que cela se passe si nous y mettons les fichiers WordPress. Arrêtez le conteneur en utilisant Docker Stop WordPress. Prenez la dernière copie de WordPress sur wordpress.org et déposez les fichiers dans le dossier du projet. Démarrez le conteneur à l'aide de Docker Start WordPress. Notez également que vous devrez initialement rendre les fichiers lisibles. Vous pouvez exécuter ChMOD -R 777 ProjectFolder sur * Nix Systems. Si vous rechargez la page, votre navigateur vous dira que:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7

Par défaut, l'image PHP n'a pas l'installation de l'extension MySQL, mais nous pouvons résoudre ce problème. Cette fois, nous créerons un conteneur via un dockerfile. Nous avons déjà vu comment Dockerfiles fonctionne. Ils sont construits à partir d'une image de base, effectuent un traitement, puis exécutent une commande à la fin.

Créez un nouveau fichier nommé dockerfile:

Nous voulons utiliser l'image PHP: 5.6-Apache.

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7

Ensuite, nous allons installer l'extension mysqli.

docker rm -f wordpressdb

Ensuite, nous devons exécuter Apache2-Foredground comme le fait l'image PHP (nous n'avons besoin que d'installer l'extension MySQL après tout).

docker run --name wordpress php:5.6-apache

En utilisant des fichiers de construction, nous pouvons créer des images. En utilisant cette image, nous construisons le conteneur.

docker run --name wordpress -v "$PWD/":/var/www/html php:5.6-apache

Le -T est utilisé pour donner un nom de référentiel. Le . dit à Docker où se trouve le dockerfile. Comme le Dockerfile est situé dans le répertoire de travail ,. dit à Docker qu'il est dans le répertoire de travail.

Si vous vérifiez les images avec des images Docker, vous verrez maintenant une nouvelle image avec TAG plus tard (car nous n'avons pas spécifié de balise pour cette image). Maintenant, construisez ce conteneur avec cette image comme nous l'avons fait avec l'image PHP5.6-APACHE.

docker run --name wordpressdb -d mysql:5.7

Vérifiez votre navigateur pour les conteneurs IP et vous verrez quelque chose comme ceci:

Comment construire manuellement les conteneurs Docker pour WordPress

Si vous êtes arrivé aussi loin, alors vous avez tout fait correctement. Nous devons maintenant lier WordPress avec une base de données. C'est loin de la célèbre installation de 5 minutes de WordPress et plus complexe, mais vous pourrez voir les avantages de Docker à long terme.

Alors, comment lions-nous WordPress avec la base de données? Nous devons d'abord lier le conteneur WordPress avec un conteneur de base de données (WordPressDB). Cela peut être fait en liant deux conteneurs. Plus de liens peuvent être trouvés ici.

error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?

Les nouveaux arguments sont - lien. La première partie WordPressdb est le nom du conteneur que nous voulons lier, et la deuxième partie MySQL est l'alias. Docker modifie l'hôte du conteneur WordPress et définit l'IP du WordPressDB vers MySQL. Ainsi, lorsque nous remplissons les informations de la base de données sur la configuration WordPress, nous définirons l'hôte sur «mysql».

Accédez maintenant à votre navigateur à l'aide de IP du conteneur (la nouvelle IP). Remplissez les informations de la base de données et connectez-vous au panneau Administrateur. Si vous essayez d'installer un nouveau thème (qui essaiera de modifier le système de fichiers), vous verrez quelque chose comme ceci:

Comment construire manuellement les conteneurs Docker pour WordPress

Pourquoi est-ce? C'est parce que l'utilisateur qui exécute Apache n'a pas d'accès en écriture sur le système de fichiers. C'est là que les choses deviennent un peu difficiles. Nous devons créer une nouvelle version de l'image PHPWithMysQL. Allez sur votre dockerfile et modifiez-le pour ressembler à ceci:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7

Nous n'avons pas encore créé un fichier d'entrée.sh, mais nous le ferons sous peu. Copies Copies EntryPoint.sh vers / à l'intérieur du conteneur. Chmod 777 /EntryPoint.sh rend ce fichier exécutable. Et enfin EntryPoint exécute ce fichier. Créez maintenant le fichier d'entrée.sh dans le même répertoire que le dockerfile.

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7

Il s'agit de la solution de contournement simplifiée de l'image officielle WordPress, mais nous assurera que nous avons un accès en écriture au système de fichiers des conteneurs. Nous pouvons maintenant construire la nouvelle image:

docker rm -f wordpressdb

Assurez-vous de supprimer les anciens conteneurs et de créer les nouveaux conteneurs:

docker run --name wordpress php:5.6-apache
docker run --name wordpress -v "$PWD/":/var/www/html php:5.6-apache
<span><span><?php 
</span></span><span>
</span><span><span>phpinfo();
</span></span><span>
</span><span><span>?></span></span>

également, supprimez l'ancien fichier wp-config.php.

Vérifiez maintenant le conteneur IP pour votre conteneur WordPress dans votre navigateur. Cette fois, vous pouvez installer des thèmes et des plugins et apporter des modifications au système de fichiers des conteneurs.

Certaines des étapes ci-dessus peuvent sembler assez cryptiques et complexes. C’est pourquoi il existe des images officielles pour de nombreux cadres et langues différents. Chaque cadre ou langue a des spécifications différentes sur leur fonctionnement. Par défaut, Docker ne permet pas à l'application d'écrire sur le système de fichiers. Est-ce une mauvaise ou une bonne chose? Je pense que c'est une bonne chose. Nous pourrions créer un troisième conteneur qui ne contient que des fichiers. Là, l'application pourrait écrire des fichiers. De cette façon, nous aurions une architecture plus modulaire. Mais pour les cadres qui ne peuvent pas être modifiés (comme WordPress), il y a des solutions de contournement.

ajustement final

La dernière chose que nous devons faire est de contourner un problème qui se produit lorsque vous arrêtez le conteneur WordPress et recommencez. Le problème est que WordPress enregistre la dernière propriété intellectuelle en tant qu’URL «Home» et «Site». Arrêtez le conteneur WordPress et recommencez. Cette fois, il aura une nouvelle IP. Si vous essayez cela dans votre navigateur, vous verrez que les images, les fichiers CSS et JavaScript ne sont pas correctement inclus. La solution est simple, modifiez simplement le wp-config.php en ajoutant ces lignes:

docker run --name wordpressdb -d mysql:5.7

Notez que si vous définissez ces valeurs dans votre fichier wp-config.php, vous ne pouvez pas les modifier plus tard dans les paramètres généraux.

Conclusion

Dans cet article, nous avons couvert comment nous pouvons construire des conteneurs pour WordPress. Nous l'avons fait d'une manière plutôt cryptique, avec de longues commandes qui peuvent être difficiles à retenir. Il devrait y avoir un moyen plus facile, et il y en a! L'équipe Docker a construit une image WordPress que vous pouvez facilement configurer en quelques minutes. Après tout, qui veut se souvenir de chaque commande pour configurer WordPress?

Dans le prochain article de cette série, je vous montre comment utiliser l'image officielle WordPress, et nous apprendrons également à utiliser Docker Composer pour rendre les choses encore plus faciles.

Alors pourquoi ai-je écrit cet article s'il existe un moyen plus facile? Essentiellement, c'était pour mieux comprendre le fonctionnement de Docker, pour ce faire pour vous salir les mains avec les complexités sous-jacentes. C'est plus une règle personnelle, donc quand j'utiliserai Docker demain, j'en saurai plus sur la façon dont cela fonctionne et comment le modifier pour mes besoins. J'espère que vous comprenez également plus profondément le fonctionnement de Docker dans les coulisses. Restez à l'écoute pour le troisième article de cette série où nous nous amuserons encore plus avec Docker et WordPress.

Que pensez-vous de Docker jusqu'à présent? Le considéreriez-vous sur votre prochain projet? Faites-moi savoir dans les commentaires ci-dessous.

Questions fréquemment posées (FAQ) sur la construction de conteneurs Docker pour WordPress

Comment puis-je m'assurer que mon conteneur Docker pour WordPress est sécurisé?

La sécurité est un aspect crucial lors de la configuration des conteneurs Docker pour WordPress. Pour vous assurer que votre conteneur est sécurisé, utilisez toujours la dernière version de Docker et WordPress. Mettez régulièrement à jour vos images et conteneurs Docker pour inclure les derniers correctifs de sécurité. Utilisez également Docker Secrets pour gérer des données sensibles comme les mots de passe. Évitez d'exécuter des conteneurs Docker comme racine pour minimiser les dommages potentiels si un conteneur est compromis. Enfin, utilisez des outils de numérisation de sécurité Docker pour identifier et fixer des vulnérabilités dans vos images.

Comment puis-je optimiser les performances de mon conteneur Docker pour WordPress?

pour optimiser les performances de votre conteneur Docker pour WordPress, envisagez d'utiliser une image de base légère. Cela réduit la taille de l'image et accélère le processus de construction. En outre, utilisez les versions multi-étages de Docker pour séparer les dépendances de construction et d'exécution, ce qui peut réduire considérablement la taille de votre image finale. De plus, limitez les ressources (CPU, mémoire) que votre conteneur peut utiliser pour l'empêcher de consommer toutes les ressources disponibles sur la machine hôte.

Comment puis-je résoudre les problèmes avec mon conteneur Docker pour WordPress?

Docker fournit plusieurs outils pour le dépannage. Utilisez la commande «Docker Logs» pour afficher les journaux d'un conteneur en cours d'exécution. Si votre conteneur se bloque, utilisez la commande «Docker Inspect» pour obtenir plus d'informations sur le conteneur. Vous pouvez également utiliser la commande «Docker Stats» pour surveiller l'utilisation des ressources de vos conteneurs. Si vous êtes confronté à des problèmes de réseau, utilisez la commande 'Docker Network Inspect' pour inspecter votre réseau Docker.

Comment puis-je sauvegarder mon site WordPress en cours d'exécution dans un conteneur Docker?

Pour sauvegarder votre Site WordPress en cours d'exécution dans un conteneur Docker, vous pouvez utiliser la commande 'Docker CP' pour copier des fichiers du conteneur vers la machine hôte. Vous pouvez également utiliser des volumes Docker pour persister des données. Si vous utilisez une base de données MySQL, vous pouvez utiliser la commande 'MySQLDump' pour créer une sauvegarde de votre base de données.

Comment puis-je mettre à l'échelle mon site WordPress en cours d'exécution dans des conteneurs Docker?

Docker Fournit plusieurs outils pour les applications de mise à l'échelle. Vous pouvez utiliser Docker Compose pour définir et exécuter des applications multi-container, et les mettre à l'échelle en augmentant le nombre d'instances de conteneurs. Vous pouvez également utiliser Docker Swarm ou Kubernetes, qui sont des outils d'orchestration qui peuvent gérer et mettre à l'échelle vos conteneurs sur plusieurs hôtes.

Comment puis-je automatiser le déploiement de mon site WordPress dans des conteneurs Docker?

Vous pouvez automatiser le déploiement de votre site WordPress dans des conteneurs Docker à l'aide d'outils CI / CD comme Jenkins, Travis CI ou GitHub. Ces outils peuvent créer vos images Docker, exécuter des tests et déployer vos conteneurs sur un hôte Docker ou un cluster Kubernetes.

Comment puis-je gérer plusieurs sites WordPress dans des conteneurs Docker?

Pour gérer plusieurs sites WordPress dans des conteneurs Docker, vous pouvez utiliser Docker Compose pour définir chaque site comme un service distinct. Vous pouvez également utiliser les réseaux Docker pour isoler le trafic réseau de chaque site. Si vous utilisez un proxy inversé comme Nginx, vous pouvez le configurer pour acheminer le trafic vers le conteneur approprié en fonction du nom de domaine.

Comment puis-je mettre à jour mon site WordPress en cours d'exécution dans un conteneur Docker?

Pour mettre à jour votre site WordPress en cours d'exécution dans un conteneur Docker, vous pouvez extraire la dernière image WordPress du Docker Hub, arrêter votre conteneur en cours d'exécution et démarrer un nouveau à l'aide de l'image mise à jour. N'oubliez pas de sauvegarder vos données avant de mettre à jour.

Comment puis-je surveiller mon site WordPress en cours d'exécution dans des conteneurs Docker?

Docker fournit plusieurs outils pour surveiller les conteneurs. Vous pouvez utiliser la commande «Docker Stats» pour surveiller l'utilisation des ressources de vos conteneurs. Vous pouvez également utiliser des outils comme Prometheus et Grafana pour collecter et visualiser les mesures de vos conteneurs.

Comment puis-je migrer mon site WordPress existant vers un conteneur Docker?

pour migrer votre site WordPress existant vers Un conteneur Docker, vous devez sauvegarder vos fichiers WordPress et votre base de données, créer un fichier dockerfile et un fichier docker pour définir vos services WordPress et votre base de données, créer vos images Docker et démarrer vos conteneurs. N'oubliez pas de mettre à jour votre configuration WordPress pour pointer vers le nouveau service de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn