dongzi1959 2017-04-25 22:06
浏览 96
已采纳

Docker生产准备好php-fpm和nginx配置

I have a small theoretical problem with combination of php-fpm, nginx and app code in Docker.

I'm trying to stick to the model when docker image does only one thing -> I have separate containers for php-fpm and 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

NOTE: In app.conf is root /var/www/app; Example schema from Symfony

This is great in development, but I don't know how to convert this to production ready state. Mount app directory in production is really bad practice (if I'm not wrong). In best case I copy app source code into container and use this prebuilded code (COPY . /var/www/app in Dockerfile), but in this case is impossible or I don't know how.

I need share app source code between two contatiner (nginx container and php-fpm container) because booth of that need it.

Of course I can make own nginx and php-fpm container and add COPY . /var/www/app into both of them, but I thing that is wrong way because I duplicate code and the whole build process (install dependencies, build source code, etc...) must be in both (nginx/php-fpm) containers.

I try to search but I don't find any idea how to solve this problem. A lot of articles show how to do this with docker-compose file and mount code with --volume but I didn't find any example how to use this on production (without volume).

Only one acceptable solutions for me (in this time) is make one container with nginx and php-fpm together but I'm not sure when is a good way (I try to find best practice).

Do you have any experiences with this or any idea how to solve it?

Thanks for any response!

  • 写回答

2条回答 默认 最新

  • ds3464 2017-05-02 18:13
    关注

    At this time I use smth like:

    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  
    

    But in few days on 17.05 release we can do in one Dockerfile smth like:

    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条)

报告相同问题?

悬赏问题

  • ¥15 如何对参数分析结构进行绘图
  • ¥15 做一个满足376和698规约的集中器程序
  • ¥50 python如何用抖音这个接口输入抖音ID查询用户信息
  • ¥30 关于移动Web网页使用TinyMCE富文本编辑器上传图片后的光标定位、压缩等几个问题如何解决:
  • ¥40 activeMq在同服务器centos8下消费很慢
  • ¥20 为什么zynq CAN IP 无法进入config配置模式,XCan_SelfTest函数失效?
  • ¥15 Pycharm中程序直接运行可以但进入调试报错
  • ¥15 MATLAB动图问题
  • ¥15 有段代码不知道怎么理解,const isToken = (config.headers || {}).isToken === false
  • ¥15 我的显卡支持CUDA最高版本是12.3,这个版本也支持VS 2022 17.0这种情况下如果我想下载CUDA11.8,需要下载旧版本的VS2022吗