我的码头设置遇到了一个鸡蛋问题。在我的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
不是一种选择。
答案 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!