Docker:Web容器和PHP容器之间的通信

我试图dockerizing项目运行与PHP + Apache的HTTP服务器。 我了解到,我需要一个容器为Apache HTTP服务器和另一个容器为PHP脚本。 我搜查了很多,但仍然不明白这是如何工作的。 我现在知道的是,我应该诉诸于dockernetworking,只要他们在同一个networking,他们应该互相沟通。

我得到的最近的信息是这个,但它使用nginx:

https://www.codementor.io/patrickfohjnr/developing-laravel-applications-with-docker-4pwiwqmh4

在这里输入图像说明

从原文引用:

vhost.conf The vhost.conf file contains standard Nginx configuration that will handle http requests and proxy traffic to our app container on port 9000. Remember from earlier, we named our container app in the Docker Compose file and linked it to the web container; here, we can just reference that container by its name and Docker will route traffic to that app container. 

我的问题是什么configuration我应该做的使PHP容器和Web容器之间的通信发生使用像上面的Apache HTTP服务器? 这背后的理由是什么? 我真的很困惑,任何信息将非常感激。

这种情况下的configuration是Docker Compose。 他们使用Docker Compose来促进容器中的DNS更改,使他们能够parsing名称,如app到IP地址。 在您链接的示例中, web服务链接到app服务。 名称app现在可以通过DNSparsing到其中一个app服务容器。

在文章中,他们使用的web服务nginxconfiguration有一个主机和端口对app:9000app服务在端口9000上的容器内侦听,而nginx会将appparsing为app服务容器的一个IP地址。

在Docker命令中的这个相当于:

应用容器:

 docker run --name app -v ./:/var/www appimage 

Web容器:

 docker run --name web --link app:app -v ./:/var/www webimage 

您链接的示例使用两个容器:

  1. 一个运行nginx的容器
  2. 一个运行php-fpm的容器

这两个容器可以相互连接,这是由于文章示例docker-compose.yml中的web服务中的links指令docker-compose.yml 。 借此,这两个容器可以将名称webappparsing到相应的docker容器。 这意味着web容器中的nginx服务只需转发到<hostname>:<port> app:9000即可将接收到的任何请求转发到php-fpm容器。


如果你想留在PHP + Apache,那么有一个核心容器php:7-apache ,它将在一个容器内完成你正在寻找的任务。 假设以下项目结构

 / Project root - /www/ Your PHP files 

你可以在你的项目根目录下如下生成一个docker-compose.yml文件:

 web: image: php:7-apache ports: - "8080:80" volumes: - ./www/:/var/www/html 

然后从您的项目根目录运行docker-compose up并能够在localhost:8080访问您的应用程序

上面的docker-compose.yml会将你的项目中的www目录作为一个卷挂载在Apache服务器所在的容器的/var/www/html目录下。