Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker生产就绪php fpm和nginx配置_Php_Nginx_Docker_Docker Compose_Dockerfile - Fatal编程技术网

Docker生产就绪php fpm和nginx配置

Docker生产就绪php fpm和nginx配置,php,nginx,docker,docker-compose,dockerfile,Php,Nginx,Docker,Docker Compose,Dockerfile,我对Docker中php fpm、nginx和应用程序代码的组合存在一个小的理论问题 当docker image只做一件事->我有单独的php fpm和nginx容器时,我试图坚持这个模型 php: image: php:5-fpm-alpine expose: - 9000:9000 volumes: - ./:/var/www/app nginx: image: nginx:alpine ports:

我对Docker中php fpm、nginx和应用程序代码的组合存在一个小的理论问题

当docker image只做一件事->我有单独的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

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

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

当然,我可以制作自己的nginx和phpfpm容器并添加
COPY/var/www/app
,但我认为这是错误的,因为我复制了代码,整个构建过程(安装依赖项、构建源代码等)必须在这两个(nginx/php fpm)容器中

我试着搜索,但我找不到任何解决这个问题的方法。很多文章都展示了如何使用docker compose file和装载代码以及--volume来实现这一点,但我没有找到任何示例如何在生产环境中使用它(没有卷)

对我来说,唯一可以接受的解决方案(目前)是将nginx和php-fpm结合在一起制作一个容器,但我不确定什么时候是一个好方法(我试图找到最佳实践)

你有没有这方面的经验,或者有没有解决的办法


谢谢你的回复

此时我使用smth,如:

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
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
docker-compose.yml

app:
  build:
    context: .
web:
  build:
    context: .
    dockerfile: Dockerfile.nginx
  volumes_from: app  
但在17.05发布的几天内,我们可以在一个Dockerfile smth中完成以下操作:

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

我通过使用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

这将创建一个卷共享位置,该位置将在两个容器之间共享数据。

相同的问题:(我需要帮助)以这种方式使用多级构建不会解决问题。如果运行此dockerfile,则只创建一个映像(具有最新FROM指令的映像)@JimPanse有
docker build--target
选项&
target
在docker.composeThats的
build
部分输入正确!我昨天发现了这个选项…有了这个选项,构建图像是惊人的!