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



我在 docker 设置中遇到了一些先有鸡还是先有蛋的问题。在我的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 中,因为目录的挂载(在我的 docker-compose 文件中)是在 Dockerfile 运行进行的。

这里最好的解决方案是什么?我想到的另一个选项是将文件复制到容器中,然后使用文件观察程序将更改的文件scp到容器中。不过,这不是一个不错的解决方案。

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

我的建议是使用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,因为在生成时,您已经拥有容器中的代码。

问候 伊迪尔!

相关内容

  • 没有找到相关文章

最新更新