簡體   English   中英

Docker:Web容器和php容器之間的通信

[英]Docker: communication between web container and php container

我正在嘗試對使用php + Apache http服務器運行的項目進行docker化。 我了解到我需要有一個用於Apache http服務器的容器和一個用於php腳本的容器。 我進行了很多搜索,但仍然不了解它是如何工作的。 我現在所知道的是,我應該訴諸於docker網絡,只要它們在同一網絡中就應該彼此通信。

我得到的最接近的信息是這個,但是它使用了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.

我的問題是我應該做些什么配置來使php容器和Web容器之間的通信使用上述Apache http服務器? 這背后的原理是什么? 我真的很困惑,任何信息將不勝感激。

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

在本文中,他們使用的web服務nginx配置具有app:9000的主機和端口對。 app服務正在端口9000的容器內部進行監聽,nginx會將app解析為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指令,這兩個容器能夠彼此連接。 這樣,兩個容器可以將名稱webapp解析為相應的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將以容器/var/www/html卷的形式將項目中的www目錄掛載在容器中,Apache將在該容器中提供文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM