Docker:web容器和php容器之间的通信

时间:2017-06-20 21:31:01

标签: php apache nginx docker boot2docker

我尝试使用php + Apache http服务器进行dockerizing项目运行。我了解到我需要一个容器用于apache http服务器和另一个用于php脚本的容器。我搜索了很多,但仍然不了解它是如何工作的。我现在知道的是,我应该求助于码头网络,只要它们在同一个网络中,就应该相互通信。

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

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

enter image description here

引自原始文章:

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.

我的问题是我应该做什么配置来使用上面的Apache http服务器进行php容器和web容器之间的通信?这背后的理由是什么?我真的很困惑,任何信息都会非常感激。

2 个答案:

答案 0 :(得分:0)

这种情况下的配置是Docker Compose。他们使用Docker Compose来促进容器中的DNS更改,从而允许他们将app等名称解析为IP地址。在您关联的示例中,web服务链接到app服务。现在可以通过DNS将名称app解析为其中一个app服务容器。

在文章中,他们使用的web服务nginx配置具有app:9000的主机和端口对。 app服务正在端口9000上的容器内侦听,nginx将app解析为app服务容器的其中一个IP地址。

仅在Docker命令中等效于:

App容器:

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

Web容器:

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

答案 1 :(得分:0)

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

  1. 运行nginx的容器
  2. 运行php-fpm的容器
  3. 由于文章示例linksweb服务中的docker-compose.yml指令,这两个容器可以相互连接。这样,两个容器可以将名称webapp解析为相应的docker容器。这意味着web容器中的nginx服务能够将收到的任何请求转发到php-fpm容器,只需转发到app:9000 <hostname>:<port>

    如果您希望继续使用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目录作为volume挂载到容器内的/var/www/html,这是Apache将从中提供文件的地方。