在这个例子中,我们将建立两个docker化的PHP-FPM和Nginx应用程序("前端 "和 "后端"),并允许它们在同一网络上相互通信。这里有三个关键点。
-
在两个项目的".env "文件中把
COMPOSE_PROJECT_NAME设为inanzzz。这将创建一个名为inanzzz_default的网络,并将两个项目的容器放入其中,这样它们就可以互相通信了。 -
两个项目的nginx端口转发应该在 "docker-compose.yml "文件中不同,例如:
8081和8082。 -
在 "docker-compose.yml "文件中,两个项目的服务名称应该是不同的,例如:
frontend_php和backend_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