この答えは少し遅いかもしれませんが、必要なのは自動リバース プロキシです。そのために2つのソリューションを使用しました。
- jwilder/nginx-proxy
- トラフィク
時間が経つにつれて、私の好みはTraefikを使用することです。主な理由は、十分に文書化および保守されており、より多くの機能 (さまざまな戦略と優先順位による負荷分散、ヘルスチェック、サーキット ブレーカー、ACME/Let's Encrypt による自動 SSL 証明書など) が付属しているためです。
jwilder/nginx-proxy の使用
Docker コンテナーJason Wilder の nginx-proxy Docker イメージを実行すると、構成を維持することなく、他のコンテナーのリバース プロキシとして nginx サーバーがセットアップされます。
VIRTUAL_HOST
環境変数を使用して他のコンテナーを実行するだけで、nginx-proxy がそれらの ip:port を検出し、nginx 構成を更新します。
*.test.local
Docker ホストの IP アドレスにマップするように DNS が設定されているとします。次に、次のコンテナーを起動して、簡単なデモを実行します。
# start the reverse proxy
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
# start a first container for http://tutum.test.local
docker run -d -e "VIRTUAL_HOST=tutum.test.local" tutum/hello-world
# start a second container for http://deis.test.local
docker run -d -e "VIRTUAL_HOST=deis.test.local" deis/helloworld
Traefik の使用
Traefikコンテナーを実行すると、リバース プロキシ サーバーがセットアップされ、コンテナーで見つかったdocker ラベルを指定して転送ルールが再構成されます。
*.test.local
Docker ホストの IP アドレスにマップするように DNS が設定されているとします。次に、次のコンテナーを起動して、簡単なデモを実行します。
# start the reverse proxy
docker run --rm -it -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock traefik:1.7 --docker
# start a first container for http://tutum.test.local
docker run -d -l "traefik.frontend.rule=Host:tutum.test.local" tutum/hello-world
# start a second container for http://deis.test.local
docker run -d -l "traefik.frontend.rule=Host:deis.test.local" deis/helloworld