如何在docker容器中处理PHP项目代码

时间:2017-02-20 19:42:42

标签: docker composer-php docker-compose

我的码头设置遇到了一个鸡蛋问题。在我的Dockerfile我安装nginx,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

现在,下一步是通过composer实际安装项目目录中的所有依赖项。这就是麻烦开始的地方:由于这是我的开发机器,我不想将我的本地项目文件复制到docker容器。相反,我将其安装在我的docker-compose.yml

version: '3'

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

我无法将composer install放在Dockerfile中,因为在运行Dockerfile之后,目录(在我的docker-compose文件中)的安装正在进行

这里最好的解决方案是什么?我想到的另一个选择是将文件最终复制到容器中,然后使用filewatcher将已更改的文件scp放入容器中。但不是一个好的解决方案。

更新我想强调一下我的实际问题:我在我的开发机器上,我想不断更新代码,并立即镜像 再次构建图像​​。因此,COPY不是一种选择。

1 个答案:

答案 0 :(得分:1)

我的建议是使用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,也可以使用允许您更新容器内代码的卷。

请注意,我已在composer install中添加了Docker,因为您在构建时已经有了容器内的代码。

此致 IDIR!