创建一个网络 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;
}
}