2016-04-30 4 views
3

私はほとんどのアプリケーションをvginpで直接nginx/php-fpmにインストールしています。私はドッカーを試してみることに決めました。そして今一週間それを遊んでいます。私は可能な限りすべてを読み、その概念を理解していると信じています。dockerを使った複数nginx/phpアプリケーション用のアーキテクチャ

しかし、私は非常に多くのnginx、php、dbのインスタンスを持って周りに私の頭を包むことはできません。私は落ち着い

一つは、それは簡単ですので、私は、1デシベルを持つようにしたいということです。

nginx-proxy: 
    image: jwilder/nginx-proxy 
    container_name: nginx-proxy 
    ports: 
    - "80:80" 
    - "443:443" 
    restart: always 
    volumes: 
    - /srv/certs:/etc/nginx/certs:ro 
    - /var/run/docker.sock:/tmp/docker.sock:ro 
    - ./vhost.d:/etc/nginx/vhost.d 
    - /usr/share/nginx/html 


nginx-certs: 
    image: jrcs/letsencrypt-nginx-proxy-companion 
    container_name: nginx-certs 
    volumes: 
    - /srv/certs:/etc/nginx/certs:rw 
    - /var/run/docker.sock:/var/run/docker.sock:ro 
    volumes_from: 
    - nginx-proxy 

mariadb: 
    image: mariadb:latest 
    container_name: mariadb 
    ports: 
    - "127.0.0.1:3306:3306" 
    restart: always 
    environment: 
    MYSQL_ROOT_PASSWORD: xxxxx 
    volumes: 
    - /srv/mysql:/var/lib/mysql 

私はまた、nginxの-certsのが魅力のように動作し、一緒にnginxのプロキシました

これはすべてダンディです。しかし、実際のアプリのコンテナをどうやって扱うのですか?

私が推奨されますので、何を、最小限にRAMの使用量を維持したい:内部の複数のボリュームと複数のnginxのサーバ

  • 1 nginxのサーバと複数のphp-FPMコンテナと

    1. 1のphp-FPMコンテナ?
    2. プロジェクトごとに1つのコンテナがあり、そのコンテナ内にnginx/php-fpmを保持します。
    3. X nginxコンテナ+ X php-fpmコンテナ。 Xアプリの量。

    任意のアイデア?

  • 答えて

    0

    ホストごとに1つのnginxコンテナが必要です。これを使用して、PHPコンテナ間の負荷分散を行う必要があります。 nginxコンテナに再起動ポリシーを正しく設定した場合は、常に実行されている必要があります。また、nginxは多くの負荷を処理できるため、1つだけ正常に動作するはずです。

    一度に1つのコンテナしかポート80と443にバインドできないため、2つのnginxコンテナの前に何かが必要なため、複数のnginxがあると管理が難しくなりますその場合は。冗長性を持たせたい場合は、同じ正確な設定、ホスト間の負荷分散を持つ別のホストを追加できます。データのボリュームと

    1デシベルコンテナが良いです。

    少なくとも1つのPHPコンテナ、理想的には複数ですが、負荷に応じて異なります。実行時にコンテナ内のデータ(PHPファイル)を変更する予定がある場合は、ボリュームを使用していることを確認し、すべてのPHPコンテナ間で共有してください。

    は、PHPのコンテナ間nginxの負荷バランスを持っている、とPHPのコンテナの再起動ポリシーが正しく設定されていることを確認してください。

    あなたがPHPのコンテナイメージを更新する必要がある場合、それはあなたが複数ある場合は、それが簡単に、そしてあなたはダウンタイムなしでローリングアップグレードを行うことができます。

    1. は、新しいイメージをプルダウン
    2. 停止PHP1コンテナ、新しいイメージ
    3. 停止php2コンテナで開始し、ダウンタイムなしで行われ、ローリング・アップグレード

    新しいイメージで起動します。

    この設定は、1つのサイトまたは複数のサイトで機能します。唯一の違いは、nginxが正しいPHPコンテナへのプロキシをホスト名に基づいて処理することです。

    あなたはいつも1つのnginxを持っていますが、ホスティングしているサイトの数に基づいてPHPコンテナが大きくなります。

    +0

    jwilder/nginx-proxyについては、PHPのコンテナに直接アクセスすることはできません。私はjwilder/nginx-proxyの下に別のnginxが必要ですか? –

    +0

    私はそのイメージを一度も使ったことはありませんが、公式のnginxがそれをサポートすることは分かっています。私は彼らがreadmeに従って一緒に働くことができると思うが、もう一度私はそれをやったことがない。 –

    +1

    2つのphp-fpmコンテナを使用すると、2つのphp opcodeキャッシュがあることを意味します。重複したデータ(コアのWordpressファイルアプリケーション間で変化しない)をRAM(一般的にVPSの世界では最も高価なリソース)に置き換えます。これを処理する最善の方法は何ですか? –

    0

    私は決してphp-fpmを使用しませんでしたが、ここの文書は私の考えを助けるでしょう:https://hub.docker.com/r/bitnami/php-fpm/「naked」php-fpmコンテナから別のコンテナにnginxをインストールする方法を説明します。各php-fpmコンテナの手順ですが、同じnginxコンテナを保持しています。ソリューション2は行く方法があるようですが、nginx-proxyはプロキシとフロントエンドの両方(1つの場所にconfを維持する)になりますので、nginx-proxy + nginx-certs + N php-fpm

    サイドノートでは、あなたは高山ベースのイメージを使用する必要があり、彼らは途方もなく小さなだと、このように、あなたが必要なもののみ付属:https://hub.docker.com/r/yavin/alpine-php-fpm/

    編集

    私はいくつかのテストをしました。 nginx-proxyの仮想ホストごとにカスタムconfを定義することができます。 PHPコンテナがリクエストを受信しましたが、502エラーが発生しました。カスタムconfには/etc/nginx/vhost.dフォルダに配置し、myphp.local(myphp.local PHPのコンテナの仮想ホストという)と命名され、それが唯一の場所ディレクティブが含まれています

    location ~ \.php$ { 
        fastcgi_pass myphp.local:9000; 
        fastcgi_index index.php; 
    } 
    

    自動生成は、default.confのようなnginxのプロキシルックスの

    upstream myphp.local { 
        server 172.17.0.2:9000; 
    } 
    
    server { 
        server_name myphp.local; 
        listen 80; 
        include /etc/nginx/vhost.d/myphp.local; 
        location/{ 
         proxy_pass http://myphp.local; 
        } 
    } 
    

    私にとっては、PHPのコンテナがポート9000で要求を受けなければならない。しかし、私はPHPに慣れていないよIそうどのような問題が起こっているのか分かりません。私のindex.phpは単純な<?php echo "hello world!" ?>です。

    +0

    ええ、私はもともとこれを目指していましたが、nginx-proxyをフロントエンドとして使用する方法がわかりません。プロキシリクエストでは何もできないと思います。 –

    +0

    @サリバンいくつかのテストの結果をもとに私の答えを更新しました。 – Shanoor

    +0

    私はその点に到達することさえできません。どのように.ymlファイルを設定しましたか?ドッカーの指示は何ですか? –

    関連する問題