How to use docker to build a php+nginx+swoole+mysql+redis environment

WBOY
Release: 2023-05-28 11:23:49
forward
1560 people have browsed it

1. Create a docker image with swoole-redis-pdo_mysql-gd extension

1. Create a dockerfile file

vim dockerfile
Copy after login

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
Copy after login

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 .
Copy after login

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
Copy after login

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"
Copy after login

Run the command

docker-compose up -d
Copy after login

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

How to use docker to build a php+nginx+swoole+mysql+redis environment

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)
Copy after login

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

How to use docker to build a php+nginx+swoole+mysql+redis environment

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
Copy after login

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
Copy after login

Access 127.0.0.1:9998, the html file is parsed normally

How to use docker to build a php+nginx+swoole+mysql+redis environment

Access 127.0.0.1:9998/index.php, the php file is parsed normally

How to use docker to build a php+nginx+swoole+mysql+redis environment

##4. Test mysql, Is redis effective

vim /var/www/html/redis.php #用于测试redis是否配置成功
<?php
$redis = new redis();
$redis->connect("172.24.0.4",6379);
$redis->set(&#39;test&#39;,&#39;this is a test for redis&#39;);
echo $redis->get(&#39;test&#39;);
Copy after login

Access 127.0.0.1:9998/redis.php, redis has taken effect

How to use docker to build a php+nginx+swoole+mysql+redis environment##Enter the mysql container

docker exec -it pnsmr_mysql_1 bash
Copy after login

Enter mysql and change the root user password

##Create test fileHow to use docker to build a php+nginx+swoole+mysql+redis environment

vim /var/www/html/mysql.php
<?php
$pdo = new pdo(&#39;mysql:host=172.24.0.2;dbname=mysql;port=3306&#39;,&#39;root&#39;,&#39;root123&#39;);
var_dump($pdo);
Copy after login
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!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template