2016-10-10 4 views
5

私はDockerを探していましたが、どのようにして複数のWebサイトをサーバー "Docker way"にホストすることができましたか。私が理解する限り、理想的にはすべてが独自のコンテナを実行する必要があり、これらのコンテナは共有されるべきではありません。PHPウェブサイトをホストするためのDockerアーキテクチャ

私の質問は、実際のリクエストを処理するためにウェブサーバーの下にリクエストを中継する1つのリバースプロキシに入ってくるリクエストを含む有効なコンテナの設定であるかどうかです。

また、以下の3つの状況では、アプリケーションのソースファイルをさまざまな方法で組み込み、3つのうちどれが最もよく使用されているかを知りたいと考えています。

私の希望は、Dockerの1台のサーバーで異なるWebサイトを実行できるようにすることです。このWebサイトには、ダイアグラムのさまざまなPHP-FPMバージョンで示すように、さまざまな要件があります。 nginx/PHP-FPMでソースファイルをインクルードするのか、それとも別々に展開するのか不明なため、ウェブサイト自体の展開自体は私には分かりません。

Docker architecture overview

次のように私の現在の設定は次のとおりです。

ドッキングウィンドウ-compose.yml

version: '2' 
services: 
    nginx: 
     image: nginx:alpine 
     restart: always 
     ports: 
      - '80:80' 
     links: 
      - example_com 
      - example_org 
      - example_net 
     volumes: 
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro 

    example_com: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_com:/var/www/example_com:ro 

    example_org: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_org:/var/www/example_org:ro 

    example_net: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_net:/var/www/example_net 

nginxの/ conf.d /は、default.conf

server { 
    listen  80; 
    server_name www.example.com example.com; 

    location ~ \.php$ { 
     fastcgi_pass example_com:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_com$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.org example.org; 

    location ~ \.php$ { 
     fastcgi_pass example_org:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_org$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.net example.net; 

    location ~ \.php$ { 
     fastcgi_pass example_net:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_net$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

これは上記の概要では説明されていませんが、概要上の状況は私にとって理想的な状況のようです。

リバースプロキシと異なるPHP-FPMコンテナを使用してこれを設定するにはどうすればよいですか?ウェブサイトとそれに続くアップデートをどのように配備しますか?

これに関するすべてのご意見をお待ちしております。

+0

私は "dinghy"はこのために役立つかもしれないリバースプロキシだと思います –

答えて

0

メインのnginxサーバーに接続されている3つのnginxサーバーは必要ないと思います。 php-fpmプロセスはソケットを聴いて、メインのnginxサーバから各php-fpmプロセスに直接接続することができます。

+0

リバースプロキシは異なるPHP-FPMコンテナと直接通信します。ソースファイルはどこに置くのですか? – Revell

+0

これらを別々のボリュームに入れ、アクセスしたいコンテナを指定することができます。 –

+0

@ChrisTannerそれは状況1で説明したようなものでしょうか? – Revell

0

私はほぼ同じシナリオで1つのWebサーバしか稼働していません。まず最初に、セットアップは、リバースプロキシとして単一のコンテナを使用し、各Webサーバーに別のコンテナを使用してこのように設定するといいと思います。

PHPを独自のコンテナで実行する必要があるかどうかはわかりません。私が代わりにnginxのではApacheを使用しています(嫌いは嫌いつもり)とあなたの2番目の質問についてはドッキングウィンドウ-compose.yml

version: '2' 

services: 
    webproxy: 
    image: myown/webproxy:x.y 
    [...] 

    webserver: 
    image: myown/webserver:x.y 
    [...] 

次私を与える両方のための独自のイメージを作成しました:私はこの質問に私と私のしてきましたデータコンテナを使用する際のポイントを見たことはありません。データは同じディスクスペースを使用しますが、格納場所はわかりません。私の意見では、バックアップのための少しトリッキー。これが、データボリュームをホストのディスクにマウントする最初のアプローチを使用している理由です。

関連する問題