Home Operation and Maintenance Nginx How to use docker to build a php+nginx+swoole+mysql+redis environment

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

May 28, 2023 am 11:23 AM
php docker nginx

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1672
14
PHP Tutorial
1277
29
C# Tutorial
1257
24
How do containerization technologies (like Docker) affect the importance of Java's platform independence? How do containerization technologies (like Docker) affect the importance of Java's platform independence? Apr 22, 2025 pm 06:49 PM

Containerization technologies such as Docker enhance rather than replace Java's platform independence. 1) Ensure consistency across environments, 2) Manage dependencies, including specific JVM versions, 3) Simplify the deployment process to make Java applications more adaptable and manageable.

The Compatibility of IIS and PHP: A Deep Dive The Compatibility of IIS and PHP: A Deep Dive Apr 22, 2025 am 12:01 AM

IIS and PHP are compatible and are implemented through FastCGI. 1.IIS forwards the .php file request to the FastCGI module through the configuration file. 2. The FastCGI module starts the PHP process to process requests to improve performance and stability. 3. In actual applications, you need to pay attention to configuration details, error debugging and performance optimization.

What happens if session_start() is called multiple times? What happens if session_start() is called multiple times? Apr 25, 2025 am 12:06 AM

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

Docker on Linux: Containerization for Linux Systems Docker on Linux: Containerization for Linux Systems Apr 22, 2025 am 12:03 AM

Docker is important on Linux because Linux is its native platform that provides rich tools and community support. 1. Install Docker: Use sudoapt-getupdate and sudoapt-getinstalldocker-cedocker-ce-clicotainerd.io. 2. Create and manage containers: Use dockerrun commands, such as dockerrun-d--namemynginx-p80:80nginx. 3. Write Dockerfile: Optimize the image size and use multi-stage construction. 4. Optimization and debugging: Use dockerlogs and dockerex

NGINX and Apache: Understanding the Key Differences NGINX and Apache: Understanding the Key Differences Apr 26, 2025 am 12:01 AM

NGINX and Apache each have their own advantages and disadvantages, and the choice should be based on specific needs. 1.NGINX is suitable for high concurrency scenarios because of its asynchronous non-blocking architecture. 2. Apache is suitable for low-concurrency scenarios that require complex configurations, because of its modular design.

Composer: Aiding PHP Development Through AI Composer: Aiding PHP Development Through AI Apr 29, 2025 am 12:27 AM

AI can help optimize the use of Composer. Specific methods include: 1. Dependency management optimization: AI analyzes dependencies, recommends the best version combination, and reduces conflicts. 2. Automated code generation: AI generates composer.json files that conform to best practices. 3. Improve code quality: AI detects potential problems, provides optimization suggestions, and improves code quality. These methods are implemented through machine learning and natural language processing technologies to help developers improve efficiency and code quality.

What is the significance of the session_start() function? What is the significance of the session_start() function? May 03, 2025 am 12:18 AM

session_start()iscrucialinPHPformanagingusersessions.1)Itinitiatesanewsessionifnoneexists,2)resumesanexistingsession,and3)setsasessioncookieforcontinuityacrossrequests,enablingapplicationslikeuserauthenticationandpersonalizedcontent.

Docker vs. Kubernetes: Key Differences and Synergies Docker vs. Kubernetes: Key Differences and Synergies May 01, 2025 am 12:09 AM

Docker and Kubernetes are leaders in containerization and orchestration. Docker focuses on container lifecycle management and is suitable for small projects; Kubernetes is good at container orchestration and is suitable for large-scale production environments. The combination of the two can improve development and deployment efficiency.

See all articles