2017-06-20 107 views
0

我正在嘗試使用php + Apache http服務器dockerizing項目。我瞭解到,我需要爲Apache HTTP服務器和用於PHP腳本的另一個容器提供容器。我搜查了很多,但仍然不理解這是如何工作的。我現在知道的是,我應該訴諸碼頭網絡,只要他們在同一個網絡中,他們應該互相通信。Docker:Web容器和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. 

我的問題是什麼配置,我應該爲了使php容器和web容器之間的通信能夠像上面那樣使用Apache http服務器進行通信嗎?這背後的理由是什麼?我真的很困惑,任何信息將非常感激。

+0

你不應該有2個容器,並且有一個可用的PHP圖像的Apache。這是一個很好的[教程](https://writing.pupius.co.uk/apache-and-php-on-docker-44faef716150),介紹如何使用Apache和PHP構建圖像 –

回答

0

這種情況下的配置是Docker Compose。他們正在使用Docker Compose來促進容器中的DNS更改,以允許他們將諸如app之類的名稱解析爲IP地址。在您鏈接的示例中,web服務鏈接到app服務。名稱app現在可以通過DNS解析到app服務容器之一。

在文章中,他們使用的web服務nginx配置有一個主機和端口對app:9000app服務在端口9000上的容器內偵聽,並且nginx將將app解析爲app服務容器的IP地址之一。

的這相當於剛剛泊塢窗命令會是這樣的:

應用程序容器:

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

Web容器:

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

你鏈接到使用兩個集裝箱的例子:

  1. 運行Nginx的
  2. 運行PHP-FPM

兩個容器容器容器就能夠連接到對方由於在本文的例子docker-compose.ymlweb服務links指令。藉此,這兩個容器可以將名稱webapp解析爲相應的碼頭集裝箱。這意味着web容器中的nginx服務只需轉發至app:9000<hostname>:<port>即可將收到的任何請求轉發到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目錄掛載爲volume,/var/www/html ntainer是Apache將爲其提供文件的地方。