2017-02-20 89 views
0

我用碼頭設置遇到了一種母雞與雞蛋的問題。在我的Dockerfile中,我安裝了nginx,php和所需的配置。我還安裝有作曲:如何處理碼頭集裝箱中的PHP項目代碼

FROM ubuntu 
RUN apt-get update && apt-get install -y \ 
    curl \ 
    nginx \ 
    nodejs \ 
    php7.0-fpm \ 
    php-intl \ 
    php-pgsql 
RUN rm -rf /var/lib/apt/lists/* && \ 
    echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \ 
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin && \ 
    chown -R www-data:www-data /var/www/ 
COPY orocrm /etc/nginx/sites-available/ 
RUN ln -s /etc/nginx/sites-availabe/orocrm /etc/nginx/sites-enabled/orocrm 
CMD nginx 

現在,下一步將是通過實際安裝作曲家項目目錄中的所有依賴性。這是麻煩開始的地方:因爲這是我的開發機器,我不想將我的本地項目文件複製到docker容器中。相反,我安裝在我的docker-compose.yml

version: '3' 

services: 
    web: 
    ... 
    volumes: 
     - "./crm-application:/var/www/orocrm/" 

我不能把composer install在Dockerfile,作爲目錄(在我的搬運工,撰寫文件)的安裝正在發生在運行Dockerfile後。

這裏最好的解決方案是什麼?我想到的另一個選項是將文件逐漸複製到容器中,然後使用filewatcher將更改後的文件保存到容器中。雖然不是一個好的解決方案。

UPDATE我想強調我的實際問題是什麼:我爲我的開發機器上,我要不斷地更新代碼,並有變化反映立即 withouth的再次構建圖像​​。因此,COPY不是一個選項。

+0

嘗試類似這樣:創建一個腳本,用於啓動容器(例如'start.sh',使其可執行),它運行'composer install',然後運行'nginx',並將其添加到'在Dockerfile中複製start.sh/start.sh'和'CMD/start.sh' – Salem

回答

0

我的建議是你的內容複製在使用COPY命令你的容器,這樣

FROM ubuntu 

COPY ./crm-application /var/www/orocrm/ 

RUN apt-get update && apt-get install -y \ 
    curl \ 
    nginx \ 
    nodejs \ 
    php7.0-fpm \ 
    php-intl \ 
    php-pgsql 

RUN rm -rf /var/lib/apt/lists/* && \ 
    echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \ 
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin && \ 
    chown -R www-data:www-data /var/www/ && \ 
    composer install 

COPY orocrm /etc/nginx/sites-available/ 

RUN ln -s /etc/nginx/sites-availabe/orocrm /etc/nginx/sites-enabled/orocrm 

CMD nginx 

爲什麼?這樣你就不需要使用docker-compose或其他系統。你將能夠運行你的單個容器。 即使您想使用docker-compose,您也可以使用捲來更新容器中的代碼。

請注意,我在Docker中添加了composer install,因爲在構建時已經有容器內的代碼。

Regards, Idir!

+0

感謝您的輸入,但正如我上面所述,我希望代碼在容器中不斷更新。在構建過程中使用'COPY'這是不可能的。 – Chrisissorry

+0

嗨@Chrisissorry,當然,因爲您使用的是碼頭工具,所以我會更新 - 您的代碼將會更新,但這並不意味着您無法複製。 您的容器應該具備運行所需的全部內容,然後,作爲附加點,您可以使用docker-compose同步您的文件夾。 這就是爲什麼'COPY'和'VOLUMES'不是唯一的。 查看與搬運工-撰寫本例中: - https://github.com/docker/example-voting-app - https://github.com/DataDog/docker-compose-example - HTTPS:/ /github.com/vegasbrianc/docker-compose-demo –