如何在單獨的NGINX和PHP-FPM容器之間提供容器化PHP應用程序的代碼,其圖像基於busybox並且僅包含代碼?我使用docker撰寫的第三個版本。Docker - 將代碼交付給nginx和php-fpm
包含代碼圖像的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
的搬運工-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容器中使用應用程序容器中的音量,但是撰寫v3不允許(volume_from指令)。無法使用它。
2)將代碼放入一個已命名的卷並將其連接到容器。以這種方式,我不能容器代碼。無法使用。 (我還必須在羣中的每個節點上手動創建該卷)
3)將代碼直接複製到基於NGINX和PHP-FPM的圖像兩次。壞主意,我必須保持他們的一致性。
卡住了。任何其他選項?我可能誤解了一些東西,只能從Docker開始。
奧凱以及我的第一個可能的解決方案是服務於多服務搬運工容器使用綁定安裝進行開發並將文件(通過Dockerfile指令)複製到用於生產的php圖像中,並創建一個暴露這些文件的卷。然後,我將通過使用命名卷的docker-compose.yml與nginx容器共享此卷。不知道它是否會運行,但至少文檔證實:https://docs.docker.com/engine/admin/volumes/#tips-for-using-bind-mounts-or-volumes – Sergey