Cómo manejar el código del proyecto PHP en el contenedor docker

Me encontré con un problema de gallina y huevo con la configuration de mi docker. En mi Dockerfile instalo nginx, php y las configuraciones necesarias. También instalo compositor allí:

 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 

Ahora, el siguiente paso sería instalar todas las dependencies en el directory del proyecto a través del compositor. Y aquí es donde comienza el problema: como esta es mi máquina de desarrollo, no quiero copyr los files de mi proyecto local en el contenedor de docker. En cambio, lo docker-compose.yml en mi docker-compose.yml :

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

No puedo poner la composer install en Dockerfile, ya que el assembly del directory (en mi file docker-compose) tiene lugar después de que se ejecute Dockerfile.

¿Cuál es la mejor solución aquí? Otra opción que me viene a la mente es la copy inicial de los files en el contenedor y más tarde usar un vigilante de files para save los files modificados en el contenedor. No es una buena solución, sin embargo.

ACTUALIZAR Me gustaría enfatizar cuál es mi problema real: estoy en mi máquina de desarrollo y quiero actualizar continuamente el código y hacer que los cambios se reflejen instantáneamente sin crear una vez más la image. Por lo tanto, COPY no es una opción.

Mi sugerencia es copyr tu contenido en tu contenedor usando el command COPY , como este

 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 

¿Por qué? de esta manera, no necesita usar docker-compose u otro sistema. Vas a poder ejecutar tu contenedor individual. Incluso si desea usar docker-componte, está usando un volumen que le permite actualizar el código dentro de su contenedor.

Tenga en count que agregué la composer install en Docker porque ya tiene el código dentro del contenedor en el momento de la compilation.

Saludos, Idir!