Home > Article > Operation and Maintenance > How to use docker to build a php+nginx+swoole+mysql+redis environment
1. Create a docker image with swoole-redis-pdo_mysql-gd extension
1. Create a dockerfile file
vim dockerfile
2. Write in the dockerfile file
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. Create a customized php image. The main thing is not to miss the last '.', which is to specify the current directory to build the image.
docker build -t myphp4 .
Run the command. Due to network problems, etc., you need to wait for comparison. After a long time, code similar to the following will appear after success
...
build process completed successfully
installing '/usr/local/include/php/ext/swoole/config .h'
installing '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/swoole.so'
install ok: channel://pecl.php.net/swoole -4.3.1
configuration option "php_ini" is not set to php.ini location
you should add "extension=swoole.so" to php.ini
removing intermediate container ad1420f7554f
--- > 2f2f332d73ce
successfully built 2f2f332d73ce
successfully tagged myphp4:latest
The custom myphp4 image of docker is now successfully created!
2. Create the docker-compose.yml file
mkdir pnsmr cd pnsmr vim docker-compose.yml
Write the following code
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"
Run the command
docker-compose up -d
Successfully See
warning: the docker engine you're using is running in swarm mode.
compose does not use swarm mode to deploy services to multiple nodes in a swarm. all containers will be scheduled on the current node.
to deploy your application across the swarm, use `docker stack deploy`.
creating network "pnsmr_default" with the default driver
creating pnsmr_php- fpm_1 ... done
creating pnsmr_redis_1 ... done
creating pnsmr_mysql_1 ... done
creating pnsmr_nginx_1 ... done
At this point, the nginx mysql redis php service has been started
3. Modify each service configuration file
1. Enter 127.0.0.1:9998 in the browser #Your server IP address should be entered here, OK See the picture below
2. Next, you need to modify the nginx configuration file in the container. First use the command to check the docker ip address of each container
docker inspect -f '{{.name}} - {{range .networksettings.networks}}{{.ipaddress}}{{end}}' $(docker ps -aq)
This command can view the IP addresses of all containers opened with docker-compose. The result is similar to the picture below. You can use the corresponding IP address for internal communication
3. Copy nginx Take out the configuration file of the container and modify and replace it so that nginx can parse php
docker cp pnsmr_nginx_1:/etc/nginx/conf.d/default.conf nginx.conf vim nginx.conf
Modify to the following code
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 文件,输出helloworld
Access 127.0.0.1:9998, the html file is parsed normally
Access 127.0.0.1:9998/index.php, the php file is parsed normally
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');Access 127.0.0.1:9998/redis.php, redis has taken effect
##Enter the mysql container
docker exec -it pnsmr_mysql_1 bash
Enter mysql and change the root user password
##Create test file
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);Access 127.0.0.1:9998/mysql.php, mysql has taken effect
The above is the detailed content of How to use docker to build a php+nginx+swoole+mysql+redis environment. For more information, please follow other related articles on the PHP Chinese website!