2017-05-22 70 views
1

我最近已經開始使用docker,並且能夠設置兩個容器,一個運行php7.0,另一個運行mysql,他們都能夠相互交談,一切工作正常,現在我想設置一個新的碼頭集裝箱,它有nginx,php5.6-fpm和php7.0-fpm安裝在單個容器上,我一直試圖實現它,因爲過去幾個小時沒有運氣。以下是我的Dockerfile如何在單個碼頭集裝箱上安裝多個PHP版本

FROM nginx:latest 
FROM php:php7.1-fpm 
FROM php:php5.6-fpm 
COPY ./src /var/www/html 
RUN apt-get update && apt-get install -y \ 
    nano \ 
    git \ 
    zip \ 
    mcrypt \ 
&& docker-php-ext-install mcrypt \ 
&& docker-php-ext-install pdo_mysql \ 
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
&& docker-php-ext-install -j$(nproc) gd \ 
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 

**編輯:**

我知道,一個容器應該有一個責任,但我在一個情況下,我需要兩個php5.6-FPM和php7.1- fpm同時運行,我可以創建三個容器,即使用php5.6-fpm和php7.1-fpm和nginx,我如何告訴nginx在container中尋找一個運行php5.6-fpm的文件夾,如果有人嘗試訪問hostone.dev等

+0

有什麼問題? –

回答

2

Docker的一個主要理念是每個容器有一個任務(或進程)。有關詳情,請參閱https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

我會懷疑你是否通過嘗試在一個容器中運行這麼多東西來充分利用Docker。可以在同一個容器中運行PHP和Apache(這裏有一個官方圖片!),但我建議不要在同一個容器中運行nginx和PHP FPM,因爲PHP FPM是它自己的進程,因此應該有自己的容器。

其次,我認爲你錯用了多個FROM功能。

https://docs.docker.com/engine/reference/builder/#from

FROM可以以創建多個圖像出現在單個Dockerfile內多次。只需在每個新的FROM命令之前記錄提交輸出的最後一個圖像ID。

FROM關鍵字指定一個基礎圖像,您在其上構建基礎圖像。如果你想要一個單一的圖像作爲輸出,你需要一個基礎圖像來構建。如果您的基本映像是php:7.1-fpm,則需要手動安裝所需的其他PHP版本。這可能很困難,因爲它們會在很多地方發生衝突。我強烈建議您重新考慮您的設計,並使用兩個獨立的容器,或者使用PHP 7運行PHP 5代碼 - 它主要是向後兼容的主要是

+0

請看我編輯的問題 –