簡體   English   中英

Docker生產准備好php-fpm和nginx配置

[英]Docker production ready php-fpm and nginx configuration

我在Docker中結合使用php-fpm,nginx和app代碼有一個很小的理論問題。

我試圖堅持模型當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的示例模式

這在開發中很棒,但我不知道如何將其轉換為生產就緒狀態。 在生產中掛載app目錄真的是不好的做法(如果我沒錯的話)。 在最好的情況下,我將應用程序源代碼復制到容器中並使用此預編譯代碼(在Dockerfile中為Dockerfile COPY . /var/www/app ),但在這種情況下是不可能的,或者我不知道如何。

我需要在兩個contatiner(nginx容器和php-fpm容器)之間共享應用程序源代碼,因為需要它的展位。

當然我可以制作自己的nginx和php-fpm容器並添加COPY . /var/www/app COPY . /var/www/app進入他們兩個,但我認為這是錯誤的方式,因為我重復代碼和整個構建過程(安裝依賴項,構建源代碼等...)必須在兩者(nginx / php-fpm) )容器。

我嘗試搜索,但我不知道如何解決這個問題。 很多文章都展示了如何使用docker-compose文件和使用--volume掛載代碼,但我沒有找到任何示例如何在生產中使用它(沒有卷)。

對我來說只有一個可接受的解決方案(在這個時間)是使用nginx和php-fpm組成一個容器,但我不確定什么時候是一個好方法( 我試圖找到最佳實踐 )。

你有這方面的經驗或任何想法如何解決它?

謝謝你的回復!

這時我使用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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM