我在Docker中结合使用php-fpm,nginx和app代码有一个很小的理论问题。
当码头工作者图片只做一件事时,我试图坚持模型 - >我有php-fpm和nginx的单独容器。
UIBarButtonItem
注意:在app.conf中UITapGestureRecognizer
Example schema from Symfony
这在开发方面很棒,但我不知道如何将其转换为生产就绪状态。在生产中挂载app目录真是不好的做法(如果我没错)。在最好的情况下,我将应用源代码复制到容器中并使用此预编译代码(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
中的root /var/www/app;
),但在这种情况下是不可能的,或者我不知道如何。
我需要在两个contatiner(nginx容器和php-fpm容器)之间共享应用程序源代码,因为需要它的展位。
当然我可以创建自己的nginx和php-fpm容器并在其中添加COPY . /var/www/app
,但我认为这是错误的方式因为我重复代码和整个构建过程(安装依赖项,构建源代码)等等......)必须在两个(nginx / php-fpm)容器中。
我尝试搜索,但我不知道如何解决这个问题。很多文章都展示了如何使用docker-compose文件和使用--volume挂载代码,但我没有找到任何关于如何在生产中使用它的示例(没有卷)。
对我来说,只有一个可接受的解决方案(在这个时间)是将一个容器与nginx和php-fpm组合在一起,但我不确定什么时候是一个好方法(我试图找到最好的实践 )。
您对此有什么经验或任何想法如何解决?
感谢您的回复!
答案 0 :(得分:2)
此时我使用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
答案 1 :(得分:0)
多阶段构建不能解决问题。
答案 2 :(得分:0)
我通过与docker-compose文件创建共享卷来解决该问题:
version: '3'
volumes:
share_place:
services:
php:
image: php:5-fpm-alpine
ports:
- 9000:9000
volumes:
- share_place:/var/www/app
nginx:
image: nginx:alpine
ports:
- 3000:80
volumes:
- share_place:/var/www/app
这将创建一个卷share_place,它将在两个容器之间共享数据。