Docker生产准备好了php-fpm和nginxconfiguration

在Docker中,我将php-fpm,nginx和应用程序代码组合在一起,我有一个小的理论问题。

我试图坚持模型时,docker形象只有一件事 – >我有单独的容器为PHP的FPM和Nginx。

php: image: php:5-fpm-alpine expose: - 9000:9000 volumes: - ./:/var/www/app nginx: image: nginx:alpine ports: - 3000:80 links: - php volumes: - ./nginx/app.conf:/etc/nginx/conf.d/app.conf - ./:/var/www/app 

注意:在app.conf中是root /var/www/app; 来自Symfony的示例模式

这是很好的发展,但我不知道如何将其转换为生产就绪状态。 在生产中装载应用程序目录是非常糟糕的做法(如果我没有错的话)。 在最好的情况下,我将应用程序的源代码复制到容器中,并使用这个预编译的代码(在DockerfileDockerfile COPY . /var/www/app ),但在这种情况下是不可能的,或者我不知道如何。

我需要两个contatiner(nginx容器和php-fpm容器)之间的共享应用程序源代码,因为需要它的展位。

当然我可以制作自己的nginx和php-fpm容器并添加COPY . /var/www/app COPY . /var/www/app到他们两个,但我的东西是错误的方式,因为我重复的代码和整个构build过程(安装依赖关系,build立源代码等)必须在两个(nginx / php-fpm )容器。

我尝试search,但我不知道如何解决这个问题。 很多文章展示了如何使用docker-compose文件和使用–volume加载代码来做到这一点,但是我没有find任何示例如何在生产(无卷)上使用它。

对我来说,只有一个可以接受的解决scheme(在这个时候)是用nginx和php-fpm一起构build一个容器,但我不确定什么时候是一个好方法( 我试图find最佳实践 )。

你有这个或任何想法如何解决它的任何经验?

谢谢你的回应!

在这个时候,我使用smth如:

Dockerfile:

 FROM php:fpm COPY . /var/www/app/ WORKDIR /var/www/app/ RUN composer install EXPOSE 9000 VOLUME /var/www/app/web 

Dockerfile.nginx

 FROM nginx COPY default /etc/nginx/default 

泊坞窗,compose.yml

 app: build: context: . web: build: context: . dockerfile: Dockerfile.nginx volumes_from: app 

但在17.05版本的几天内,我们可以在一个Dockerfile中做如下的操作:

 FROM php:cli AS builder COPY . /var/www/app/ WORKDIR /var/www/app/ RUN composer install && bin/console assets:dump FROM php:fpm AS app COPY --from=builder /var/www/app/src /var/www/app/vendor /var/www/app/ COPY --from=builder /var/www/app/web/app.php /var/www/app/vendo /var/www/app/web/ FROM nginx AS web COPY default /etc/nginx/default COPY --from=builder /var/www/app/web /var/www/app/web