设置 PHP-FPM 和 Nginx Docker 容器
本文将讨论在 Docker 上进行本地开发时如何设置 PHP、PHP-FPM 和 NGINX 容器。
要点:
- 在命令行上构建和运行容器。
- Docker 文件及其用途。
- 容器如何交互。
确保您的设备上安装了 Docker 程序和 Git Bash。
设置 PHP CLI 容器
我们将创建目录 C:/delft/docker-php/app,我们将在其中存储我们的源代码:
mkdir -p "C:/delft/docker-php/app"
在我们的教程中,我们将使用官方 PHP 图像。 我们运行下面的代码;
docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
这意味着,
- docker run - 这将运行一个容器。
- -d - 它将在后台运行(分离)。
- --name docker-php - 这将指定 docker-php。
- -v "C:/delft/docker-php/app":/var/www - 这会将 Windows 主机上的目录 C:/delft/docker-php/app 与容器中的 /var/www 同步。
- php:7.0-cli - 这将使用此图像来构建容器。
输出结果如下:
$ docker run -d --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
Unable to find image 'php:7.0-cli' locally
因为我们的机器没有镜像,Docker 将尝试从官方注册表中获取镜像。
我们运行 docker ps -a
命令来查看容器是否正在运行。
您会注意到容器在初始化后立即停止运行。 我们需要将 -i 参数添加到 docker run
命令。
在再次运行 docker run 命令之前,请运行以下命令。
$ docker rm docker-php
上面的命令删除了我们的第一个 docker-php,因为我们不能再次使用它。 我们现在可以使用 -i 标志运行 docker run
命令。
docker run -di --name docker-php -v "C:/delft/docker-php/app":/var/www php:7.0-cli
7b3024a542a2d25fd36cef96f4ea689ec7ebb758818758300097a7be3ad2c2f6
运行 docker ps -a
命令检查容器是否正在运行。
要登录,请运行以下命令;
winpty docker exec -it docker-php bash
使用 PHP-FPM 和 NGINX 设置 Web 堆栈
现在让我们讨论如何设置 PHP-FPM 和 Nginx 容器。
设置 NGINX
我们首先获取一个服务器,该服务器将充当运行官方 Nginx 映像的容器。 我们将创建一个 docker-compose.yml 来运行我们最新的 Nginx 图像。 我们将使用端口 80 和 8080。
web:
image: nginx:latest
ports:
- "8080:80"
然后我们运行 docker-compose up
命令。
输出:
让我们将 docker-compose.yml 文件挂载到本地存储库。 我们将使用我们的 docker-compose.yml 文件所在的文件夹 jiyik。
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./jiyik:/jiyik
此时,Nginx 并不知道我们的文件夹存在。 我们将使用以下 site.conf 文件来解决此问题。
server {
index index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /delft;
}
我们需要激活设置。 让我们再修改 docker-compose.yml 文件。
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./jiyik:/jiyik
- ./site.conf:/etc/nginx/conf.d/site.conf
我们现在可以将 index.html 添加到我们的 jiyik 文件夹并运行下面的代码;
docker-compose up
我们的 Nginx 应该已经启动并运行了。
添加 PHP-FPM
下一步是获取官方的 PHP7-FPM,它将链接到我们的 Nginx 容器。 更新后的 docker-compose.yml 文件应如下所示。
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./jiyik:/jiyik
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php
php:
image: php:7-fpm
我们现在将配置 Nginx 容器以使用 PHP-FPM 容器解释 PHP 文件。 我们更新后的 site.conf 文件将读取,
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /delft;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
让我们测试程序。 首先,我们将我们的 index.html 文件重命名为 index.php 并将内容更改为以下内容。
<?php
echo phpinfo();
在运行 docker-compose up
命令之前,我们必须将 jiyik 文件夹挂载到我们的 PHP 容器中。 我们的 docker-compose.yml 文件的最终迭代将读取,
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./jiyik:/jiyik
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php
php:
image: php:7-fpm
volumes:
- ./jiyik:/jiyik
运行 docker-compose up
命令会产生下图。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341