[英]Docker - deliver the code to nginx and php-fpm
如何在單獨的NGINX和PHP-FPM容器之間提供容器化PHP應用程序的代碼,該應用程序的映像基於busybox並且僅包含代碼? 我使用第3版的docker compose。
包含代碼的圖像的Dockerfile將是:
FROM busybox
#the app's code
RUN mkdir /app
VOLUME /app
#copy the app's code from the context into the image
COPY code /app
docker-compose.yml文件將是:
version: "3"
services:
#the application's code
#the volume is currently mounted from the host machine, but the code will be copied over into the image statically for production
app:
image: app
volumes:
- ../../code/cms/storage:/storage
networks:
- backend
#webserver
web:
image: web
depends_on:
- app
- php
networks:
- frontend
- backend
ports:
- '8080:80'
- '8081:443'
#php
php:
image: php:7-fpm
depends_on:
- app
networks:
- backend
networks:
cms-frontend:
driver: "bridge"
cms-backend:
driver: "bridge"
我想到的解決方案既不合適:
1)在PHP和NGINX容器中使用應用程序容器中的卷,但是comp3不允許它(volumes_from指令)。 不能用它。
2)將代碼放在指定的卷中並將其連接到容器。 這樣,我無法容納代碼。 不能用。 (我還必須在群中的每個節點上手動創建此卷?)
3)基於NGINX和PHP-FPM將代碼直接復制兩次到圖像中。 不好的想法,我必須讓他們保持一致。
堅持這個。 還有其他選擇嗎? 我可能誤解了一些東西,只從Docker開始。
我也一直在尋找解決類似的問題,而且當兩個服務在一個容器中運行以進行生產時,Nginx + PHP-FPM似乎是其中一個例外。 在開發中,您可以將項目文件夾綁定到nginx和php容器。 根據Bret Fisher的指南,php的默認值為: php-docker-good-defaults
到目前為止,Nginx + PHP-FPM組合是我建議使用多服務容器的唯一方案。 這是一個相當獨特的問題,並不總是適合“一個容器,一個服務”的模型。 您可以使用兩個單獨的容器,一個使用nginx,另一個使用php:fpm,但我在生產中嘗試過,並且有很多缺點。 PHP代碼的副本必須在每個容器中,它們必須通過TCP進行通信,這比單個容器中使用的Linux套接字要慢得多,並且因為它們之間通常有一對一的關系,所以個人服務控制是沒有實際意義的。
您可以在此處閱讀有關在docker頁面上設置多個服務容器的更多信息(它也在上面的鏈接中列出): Docker在容器中運行多個服務
我看到它的方式,你有兩個選擇:
(1)使用Docker-compose :(這是非常簡單的開發環境)
您將不得不從nginx和php-fpm圖像構建兩個單獨的容器。 然后只需在nginx上的web文件夾上從php-fpm提供app文件夾。
# The Application
app:
build:
context: ./
dockerfile: app.dev.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
expose:
- 9000
# The Web Server
web:
build:
context: ./
dockerfile: web.dev.dockerfile
working_dir: /var/www
volumes_from:
- app
links:
- app:app
ports:
- 80:80
- 443:443
(2)使用單個Dockerfile構建其中的所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.