簡體   English   中英

在同一個Dockerfile中可以有PHP + MongoDb + Nginx嗎?

[英]Is possible to have PHP + MongoDb + Nginx in the same Dockerfile?

我需要將3個服務僅運行到一個docker容器中。 我在一個docker-compose中完成了這個“系統”,但是由於某些限制,我只需要將它放入一個dockerfile中即可。 我要運行的應用程序是PHP(帶有Symfony)+ MongoDb。

現在,我正在執行以下命令:

sudo docker run -p 9091:80 -p 27017:27017 myapp

當我瀏覽到localhost:9091時,得到的最大錯誤為502。

謝謝

Dockerfile:

FROM php:7.3-fpm-stretch
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt update
RUN apt install -y \
    nginx \
    mongodb
COPY nginx.conf /etc/nginx/nginx.conf
RUN pecl install mongodb
RUN docker-php-ext-enable mongodb

RUN service nginx start
RUN service mongodb start

EXPOSE 9091
EXPOSE 27017

COPY entrypoint.sh /
WORKDIR /usr/www
ENTRYPOINT ["/entrypoint.sh"]

COPY . /usr/www

entrypoint.sh

#!/bin/bash

set -e -u

service nginx start
service mongodb start

tail -f /dev/null

nginx.conf

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;
        server_name localhost;
        root /usr/www/public;

        location / {
            try_files $uri /index.php$is_args$args;
        }

        location ~ ^/index\.php(/|$) {
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
        }

        error_log /dev/stderr debug;
        access_log /dev/stdout;
    }
}

是的,這是可能的,但是在docker上下文中,不是推薦的方法。

將每個容器限制為一個過程是一個很好的經驗法則

解耦應用

每個容器應該只有一個方面。 將應用程序解耦到多個容器中,可以更輕松地水平縮放和重復使用容器。 例如,一個Web應用程序堆棧可能由三個單獨的容器組成,每個容器都有自己的唯一映像,以分離的方式管理Web應用程序,數據庫和內存中的緩存。

因此最好使用docker-compose並啟動三個容器,並使用docker網絡進行通信。

這將或多或少地

在此處輸入圖片說明

或使用docker-compose

在此處輸入圖片說明

至於當前的問題(如注釋中所述),您尚未啟動PHP,最好檢查一下容器的日志。

dockerfile的問題是您沒有啟動php-fpm。 您將使用supervisor在單個容器中管理多個服務, 文檔非常清楚地說明了該用例。

您還可以參考示例,獲取有關nginx,php-fpm和mysql的完整受管conf。

鑒於此,不建議在單個容器中運行多個服務。

暫無
暫無

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

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