创建一个网络 docker network create -d bridge lnmpr-net

# 运行 MySQL 并加入网络
docker run --name mysql_3 -itdp 10003:3306 -e MYSQL_ROOT_PASSWORD=123456 --mount type=bind,source=D:/Docker/MySQL,target=/var/lib/mysql --network lnmpr-net mysql:8.0.26

# 运行 Redis 并加入网络
docker run --name redis -dp 20000:6379 --mount type=bind,source=D:/Docker/Redis,target=/data --network lnmpr-net redis:6 redis-server /data/docker_redis.conf --appendonly yes

# 运行 Nginx 容器并加入网络
docker run -d -p 30000:80 --name nginx_1 --mount type=bind,source=D:/Docker/Nginx/www,target=/usr/share/nginx/html --mount type=bind,source=D:/Docker/Nginx/logs,target=/var/log/nginx --mount type=bind,source=D:/Docker/Nginx/conf/nginx.conf,target=/etc/nginx/nginx.conf --mount type=bind,source=D:/Docker/Nginx/conf/conf.d,target=/etc/nginx/conf.d --network lnmpr-net nginx:1.21

# 运行 php-fpm 容器并加入网络
docker run --name fpm_8 -d --mount type=bind,source=D:/Docker/Nginx/www,target=/var/www/html --network lnmpr-net php:8.0.9-fpm

如果是宿主机安装 nginx

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b63ff19872f3 localhost/uploadcenter/php80:v1.0 php-fpm 8 weeks ago Up 8 weeks ago 0.0.0.0:9100->9000/tcp php80

如果是宿主机安装 nginx 的话,那么 PHP 容器就需要将端口映射出来了,具体的 nginx 配置文件如下:

server {
    if ($host = demo.shuxiaoyuan.com) {
        return 301 https://$host$request_uri;
    }

    listen      80;
    server_name  demo.shuxiaoyuan.com;
    rewrite ^ https://demo.shuxiaoyuan.com/$request_uri? permanent;
}

server {
    listen       443;
    server_name  demo.shuxiaoyuan.com;

    ssl_certificate /usr/local/nginx/conf/ssl/demo.shuxiaoyuan.com.pem;
    ssl_certificate_key /usr/local/nginx/conf/ssl/demo.shuxiaoyuan.com.key;

    root   /www/upload-center/public;

    add_header 'Access-Control-Allow-Origin' *;
    add_header 'Access-Control-Allow-Headers' *;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' *;

    location / {
        index index.php index.htm index.html;

        try_files $uri $uri/ /index.php?$query_string;
    }

    # 注意此处的配置,php-fpm 将 9100 端口映射出来了
    location ~ \.php$ {
        root /www/upload-center;
        fastcgi_pass   127.0.0.1:9100;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/upload-center/public/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

注意,注意

将 PHP 并入到网络中后,如果需要运行 PHP 代码,需要配置 nginx,上面的例子中,将 nginx 的配置文件 使用数据卷映射到本地了,所以我们只需要修改相应的 nginx 配置,部分配置如下

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_pass   fpm_7.4:9000;
        fastcgi_index  index.php;

        # 特别需要注意这条语句,将 /var/www/html 替换为你真实的目录
        fastcgi_param  SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

        include        fastcgi_params;
    }
}