我尝试使用php + Apache http服务器进行dockerizing项目运行。我了解到我需要一个容器用于apache http服务器和另一个用于php脚本的容器。我搜索了很多,但仍然不了解它是如何工作的。我现在知道的是,我应该求助于码头网络,只要它们在同一个网络中,就应该相互通信。
我得到的最接近的信息是这个,但它使用的是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.
我的问题是我应该做什么配置来使用上面的Apache http服务器进行php容器和web容器之间的通信?这背后的理由是什么?我真的很困惑,任何信息都会非常感激。
答案 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)
您链接的示例使用两个容器:
由于文章示例links
中web
服务中的docker-compose.yml
指令,这两个容器可以相互连接。这样,两个容器可以将名称web
和app
解析为相应的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将从中提供文件的地方。