网站首页 > 技术教程 正文
在本教程中,我们将配置一个nginx容器来服务静态内容,以及一个php容器来服务php文件。
客户端: 20.10.12 服务器。20.10.12
- 必须安装Docker并运行docker守护进程。
- 运行docker命令的用户可能被添加到docker组,否则你可能需要sudo权限来运行这些命令。(可选)
作为工作的一部分,你可能已经在同一个容器中配置了Nginx和PHP。但是,最近我们有一个要求,要将Nginx和PHP-fpm配置在不同的容器中。
运行下面的命令来提取图像
docker image pull nginx:latest
docker image pull php:fpm
确认镜像已被正确拉出。
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php fpm 6c2e0d7fb356 11 days ago 450MB
nginx latest a99a39d070bf 11 days ago 142MB
docker network create --driver bridge my-net
要列出已创建的桥接网络
docker network ls
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
首先,我们将创建一个nginx容器。
docker container run -d --name nginx -p 8080:80 -v index.php:/usr/share/nginx/html --network my-net nginx:latest
-d = 分离容器的shell会话,并在后台运行该容器
-p = 端口映射,用于将容器的端口映射到主机系统上。这里,容器的8080端口被映射到主机系统的80端口。
-v = 绑定挂载一个卷
- network = 将一个容器连接到一个网络,这使得容器之间可以进行基于名称的通信。
- 我们创建一个名为 "nginx "的容器。
- 我们创建一个名为 "nginx "的容器。
- 本地创建的index.php文件被挂载到/usr/share/nginx/html目录,这是Nginx容器的文件根。
- 容器将被连接到我们之前创建的桥接网络。基于名字的通信只有在自定义桥接网络中才能实现。
- 容器是使用我们从docker集线器中提取的nginx:fresh镜像构建的。这里,"最新 "是Nginx镜像的一个标签。在docker的情况下,标签起着非常重要的作用。
同样地,让我们创建一个PHP-fpm容器。
docker container run -d --name php -p 9000:9000 -v index.php:/var/www/html --network my-net php:fpm
选项和以前一样。
- 在这里,我们创建一个名为 "php "的容器。
- PHP-fpm 的默认端口是 "9000"。所以同样的端口被映射到本地系统。当主机系统的9000端口上有请求时,它将被重定向到php容器上。
- 同样在本地创建的index.php文件也必须被挂载到PHP容器中。因此,它被挂载到/var/www/html目录下,这是PHP容器的文档根目录。
- PHP容器必须连接到同一个桥接网络。
- 容器的图像是php:fpm。其中fpm是PHP图像的标签。
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2193060a2768 php:fpm "docker-php-entrypoi…" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp php
288e76fa12a3 nginx:latest "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx
运行下面的命令来初始化容器的bash会话。
docker container exec -it nginx bash
一旦这个命令被执行,你将得到一个容器的shell提示。现在我们需要安装一个编辑器(例如:vim、nano)来编辑Nginx的配置文件。
root@288e76fa12a3:/# apt update &> /dev/null ; apt install vim -y &> /dev/null
导航到配置文件并添加以下配置。
cat /etc/nginx/conf.d/default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
set $filename "index.php";
if ( $fastcgi_script_name ~ "^/+(.*)#34; ) {
set $filename $1;
}
fastcgi_param SCRIPT_FILENAME $filename;
include fastcgi_params;
}
}
- 服务器块用于定义特定域或主机名的设置。
- "listen "指令告诉Nginx在80端口监听IPv4和IPv6地址的传入请求。
- server_name "指令指定该服务器块应处理 "localhost "域名的请求。
- 带有"/"的位置块用于定义服务器的根目录,即"/usr/share/nginx/html",以及当客户端请求网站根目录时应该提供的索引文件。
- error_page "指令用于指定一个自定义的错误页面,当客户端收到一个服务器错误(如500、502、503、504)时,应该显示该页面。带有'= /50x.html'的位置块指定了错误页面的根目录,即"/var/www/html"。
- 带有"~ .php#34;的位置块被用来处理 PHP 文件。这个区块指定 PHP 文件的根目录为"/var/www/html"。
- fastcgi_pass "指令告诉Nginx将PHP请求传递给运行在主机 "php "上、监听端口为9000的FastCGI服务器。
- fastcgi_index "指令指定了当客户端请求一个目录时要提供的默认PHP文件。
- "set "指令用于设置一个变量,该变量在以后用于向 PHP 解释器指定脚本名称。
- fastcgi_param "指令用于向 PHP 解释器指定脚本名称。
- 最后,"include "指令用于包括一个带有FastCGI参数的单独文件。
root@288e76fa12a3:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
由于配置中没有错误,我们可以进一步进行。在对配置文件进行任何修改后,一定要检查是否有语法错误。
由于我们对配置进行了修改,nginx服务必须被重新启动。一个简单的方法是退出容器,重新启动容器。
root@288e76fa12a3:/# exit
这个命令将从容器中退出会话并在我们的本地syscal系统中建立一个shell会话。现在,重新启动容器。
sreehari@sh:~$ docker container restart nginx
检查容器是否已经重新启动,没有任何错误。
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2193060a2768 php:fpm "docker-php-entrypoi…" 40 minutes ago Up 40 minutes 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp php
288e76fa12a3 nginx:latest "/docker-entrypoint.…" 40 minutes ago Up 10 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx
http://localhost:8080
在这篇文章中,我们学习了如何在不同的容器上设置Nginx和PHP,并允许它们进行通信,以便它们能够处理请求。
猜你喜欢
- 2024-10-11 浅谈从PHP迁移至Golang(基础篇)(php传值到另一个php)
- 2024-10-11 相同逻辑的php与golang代码效率对比,最好语言落谁家…
- 2024-09-21 Promethues如何监控PHP(prometheus snmp监控)
- 2024-09-21 蓝易云 - 在centos中配置nginx+php的环境教程。
- 2024-09-21 Zabbix运维—监控php-fpm、redis服务
- 2024-09-21 Zabbix 5.2由浅入深之监控php-fpm
- 2024-09-21 PHP-FPM实现性能优化的方法(php-fpm 优化)
- 2024-09-21 PHP-FPM高负载的解决办法(php高负载解决方案)
- 2024-09-21 php-fpm的配置和优化(php-fpm调优)
- 2024-09-21 docker中运行php文件(docker php fpm)
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)