Maison >Opération et maintenance >Nginx >Comment utiliser Docker pour créer un environnement php+nginx+swoole+mysql+redis
1. Créez une image docker avec l'extension swoole-redis-pdo_mysql-gd
1 Créez un fichier docker
vim dockerfile
2 Écrivez dans le fichier docker
from php:7.1-fpm run apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-configure pdo_mysql \ && docker-php-ext-install pdo_mysql \ && pecl install redis-4.3.0 \ && pecl install swoole \ && docker-php-ext-enable redis swoole
3. le dernier '.' consiste à spécifier le répertoire actuel pour construire l'image
docker build -t myphp4 .
Exécutez la commande En raison de problèmes de réseau, etc., vous devez attendre longtemps. Après le succès, un code similaire à celui-ci apparaîtra
....
processus de construction terminé avec succès
installation de '/usr/local/include/php/ext/swoole/config.h'
installation de '/usr/local/lib/php/extensions/no-debug-non- zts-20160303/swoole.so'
installation ok : canal://pecl.php.net/swoole-4.3.1
l'option de configuration "php_ini" n'est pas définie sur l'emplacement php.ini
vous devez ajouter "extension=swoole. so" vers php.ini
suppression du conteneur intermédiaire ad1420f7554f
---> 2f2f332d73ce
construit avec succès 2f2f332d73ce
marqué avec succès myphp4:latest
Jusqu'à présent, l'image myphp4 personnalisée de Docker a été créée avec succès !
2. Créez le fichier docker-compose.yml
mkdir pnsmr cd pnsmr vim docker-compose.yml
Écrivez le code suivant
version: '3.0' services: nginx: image: "nginx:latest" ports: - "10000:80" volumes: - /var/www/html:/usr/share/nginx/html php-fpm: image: "myphp4" volumes: - /var/www/html:/usr/share/nginx/html mysql: image: "mysql:latest" redis: image: "redis:4.0"
Exécutez la commande
docker-compose up -d
Vous pouvez voir si elle réussit
avertissement : le moteur Docker que vous utilisez est exécuté en mode essaim.
compose n'utilise pas le mode essaim pour déployer des services sur plusieurs nœuds dans un essaim, tous les conteneurs seront planifiés sur le nœud actuel.
pour déployer votre application sur l'essaim, utilisez `docker stack déployer`.
création du réseau "pnsmr_default" avec le pilote par défaut
création de pnsmr_php-fm_1 ... terminé
création de pnsmr_redis_1 ... Terminé
création de pnsmr_Mysql_1 ... Terminé
création de pnsmr_nginx_1 ... don À ce stade, le service Nginx MySQL Redis Php a été ouvert
3. Modifiez chaque fichier de configuration de service
1 Entrez 127.0.0.1:9998 dans le navigateur #L'adresse IP de votre serveur doit être saisie ici, vous pouvez voir l'image ci-dessous
2. Ensuite, vous devez modifier Pour le fichier de configuration nginx dans le conteneur, utilisez d'abord la commande pour afficher l'adresse IP docker de chaque conteneur
docker inspect -f '{{.name}} - {{range .networksettings.networks}}{{.ipaddress}}{{end}}' $(docker ps -aq)Cette commande peut afficher les adresses IP de tous les conteneurs ouverts avec docker-compose. le résultat est similaire à l'image ci-dessous. Vous pouvez utiliser l'adresse IP correspondante pour la communication interne
3 Copiez le fichier de configuration du conteneur nginx, puis modifiez-le et remplacez-le afin que nginx puisse analyser php
docker cp pnsmr_nginx_1:/etc/nginx/conf.d/default.conf nginx.conf vim nginx.confModifiez-le. au code suivant
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the php scripts to apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the php scripts to fastcgi server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 172.24.0.3:9000;#此处需要填写你的php容器的docker内部通讯ip fastcgi_index index.php; fastcgi_param script_filename /usr/share/nginx/html/$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } docker cp nginx.conf pnsmr_nginx_1:/etc/nginx/conf.d/default.conf #将修改好的配置文件拷贝到容器里 docker container stop pnsmr_nginx_1 docker container start pnsmr_nginx_1 #重启nginx容器使配置文件生效 vim /var/www/html/index.php #在服务器本地目录新建 index.php 文件,输入<?php phpinfo(); 并保存 vim /var/www/html/index.html #在服务器本地目录新建 index.html 文件,输出helloworldVisitez 127.0.0.1:9998, le fichier html est analysé normalement
Visitez 127.0.0.1:9998/index.php, l'analyse du fichier PHP est normale
4. Testez mysql, redis est efficace
vim /var/www/html/redis.php #用于测试redis是否配置成功 <?php $redis = new redis(); $redis->connect("172.24.0.4",6379); $redis->set('test','this is a test for redis'); echo $redis->get('test');Visitez 127.0.0.1:9998/redis.php, redis a pris effet
Entrez le conteneur mysql
docker exec -it pnsmr_mysql_1 bashEntrez mysql et changez le mot de passe de l'utilisateur root
Créer un fichier de test
vim /var/www/html/mysql.php <?php $pdo = new pdo('mysql:host=172.24.0.2;dbname=mysql;port=3306','root','root123'); var_dump($pdo);Visitez 127.0.0.1:9998/mysql.php, mysql a pris effet
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!