多个docker化的PHP-FPM和Nginx应用程序在同一网络上相互通信

136 阅读1分钟

在这个例子中,我们将建立两个docker化的PHP-FPM和Nginx应用程序("前端 "和 "后端"),并允许它们在同一网络上相互通信。这里有三个关键点。

  • 在两个项目的".env "文件中把COMPOSE_PROJECT_NAME 设为inanzzz 。这将创建一个名为inanzzz_default 的网络,并将两个项目的容器放入其中,这样它们就可以互相通信了。

  • 两个项目的nginx端口转发应该在 "docker-compose.yml "文件中不同,例如:80818082

  • 在 "docker-compose.yml "文件中,两个项目的服务名称应该是不同的,例如:frontend_phpbackend_php 等等。

结构

正如你在下面看到的,为了简单起见,结构保持不变。

前端

$ tree

后台

$ tree

前台文件

index.html

Success: HTML page (Frontend)

index.php

echo 'Success: PHP page (Frontend)'.PHP_EOL;

docker/.env

COMPOSE_PROJECT_NAME=inanzzz

docker/docker-compose.yml

version: "3"

docker/php/www.conf

[www]

docker/php/Dockerfile

FROM php:7.2-fpm-alpine

docker/nginx/app.conf

server {

docker/nginx/Dockerfile

FROM nginx:1.15-alpine

后台文件

index.html

Success: HTML page (Backend)

index.php

echo 'Success: PHP page (Backend)'.PHP_EOL;

docker/.env

COMPOSE_PROJECT_NAME=inanzzz

docker/docker-compose.yml

version: "3"

docker/php/www.conf

[www]

docker/php/Dockerfile

FROM php:7.2-fpm-alpine

docker/nginx/app.conf

server {

docker/nginx/Dockerfile

FROM nginx:1.15-alpine

构建

前台

frontend/docker$ docker-compose up -d

后台

backend/docker$ docker-compose up -d

验证

图片

$ docker images

容器

$ docker ps

网络

$ docker network ls
$ docker inspect inanzzz_default

容器bash提示

$ docker exec -it backend_php bash

测试

静态的前台调用。

$ curl http://localhost:8081 # or /index.html

静态后端调用。

$ curl http://localhost:8082 # or /index.html

前端消耗后端。

$ curl http://localhost:8081/index.php

后端消耗前端。

$ curl http://localhost:8082/index.php