Avec la popularité de la technologie de conteneurisation, de plus en plus d'applications commencent à utiliser les conteneurs Docker pour le déploiement, et Portainer, en tant que gestionnaire de conteneurs léger, est également largement reconnu pour sa facilité d'utilisation et sa portabilité. Cet article explique comment utiliser PHP pour implémenter un gestionnaire de conteneurs Portainer open source.
1. Introduction à Portainer
Portainer est un gestionnaire de conteneurs Docker léger et open source qui peut gérer les conteneurs Docker, les images, les réseaux et les volumes de données via une interface Web simple. Portainer prend en charge une variété d'environnements Docker, notamment les clusters Docker local, Docker distant et Swarm. La caractéristique de Portainer est qu'il est simple à utiliser et ne nécessite aucune opération compliquée, ni même la nécessité d'utiliser la ligne de commande pour la gestion. De plus, Portainer prend également en charge la gestion multi-utilisateurs et multi-équipes, permettant aux utilisateurs de gérer facilement plusieurs projets.
2. PHP implémente Portainer
Portainer est écrit en langage Go, mais une fonction similaire peut également être implémentée via PHP. En PHP, vous pouvez gérer et exploiter des conteneurs Docker à l'aide de l'API Docker. Nous pouvons utiliser le client HTTP Guzzle PHP pour envoyer des requêtes HTTP à Docker Daemon et analyser la réponse pour implémenter le mappage de ports, la gestion des conteneurs et d'autres fonctions. Tout d'abord, vous devez installer Guzzle PHP en PHP Pour la méthode d'installation, veuillez vous référer au site officiel de Guzzle (https://docs.guzzlephp.org/en/stable/).
Ce qui suit prend la gestion des conteneurs Docker comme exemple pour présenter comment implémenter une version PHP simple de Portainer. Tout d'abord, vous devez obtenir un jeton d'accès pour l'API Docker. Le jeton d'accès peut être obtenu via la commande suivante :
$ TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/nginx:pull" | jq -r '.token')
Après avoir obtenu le jeton d'accès, vous pouvez obtenir la liste des conteneurs via le code suivant :
$client = new GuzzleHttpClient([ 'headers' => [ 'Authorization' => 'Bearer ' . $TOKEN, ], ]); $response = $client->get('https://registry.hub.docker.com/v2/repositories/library/nginx/tags/'); $containers = json_decode($response->getBody(), true)['results'];
Ce qui précède Le code peut être obtenu en accédant à Docker Hub. La liste des étiquettes de l'image nginx. La réponse renvoyée comprend le nom, le numéro de version, la taille et d'autres informations du conteneur. De même, vous pouvez obtenir le mappage des ports, les journaux du conteneur et d'autres informations en accédant aux informations d'état du conteneur :
$response = $client->get('http://localhost:2375/containers/nginx/json'); $container_info = json_decode($response->getBody(), true);
Après avoir obtenu les informations d'état du conteneur, vous pouvez effectuer des opérations sur le conteneur, telles que le démarrage, l'arrêt, le redémarrage, etc. :
$response = $client->post('http://localhost:2375/containers/nginx/start'); $response = $client->post('http://localhost:2375/containers/nginx/stop'); $response = $client->post('http://localhost:2375/containers/nginx/restart');
3. Résumé
Cet article présente comment utiliser PHP pour implémenter un gestionnaire de conteneurs Portainer open source Bien que PHP présente certaines pertes de performances par rapport à Go, l'utilisation de PHP pour implémenter Portainer présente également certains avantages, tels qu'un déploiement facile. et maintenance, et installation secondaire facile. Développement secondaire, etc. La mise en œuvre de Portainer via PHP permet à davantage de personnes de profiter de la commodité apportée par la conteneurisation et s'engage à promouvoir la vulgarisation et l'utilisation de la technologie de conteneurisation.
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!