web-dev-qa-db-ja.com

Dockerコンテナーで実行しているWebサイト、仮想ホストの実装方法は?

2つのWebサイトを2つのDockerコンテナーでそれぞれvpsで実行しています。例えばwww.myblog.comおよびwww.mybusiness.com

2つのWebサイトがどちらもポート80を使用できるように、vpsにvirtualhostを実装するにはどうすればよいですか。

私はどこかでこの質問をしました、そして、見ることを提案されました: https://github.com/hipache/hipache および https://www.tutum.co/ 彼らは少し曲がって見えます。私はそれを達成する簡単な方法があるかどうかを見つけようとしています。ありがとう!

さらに、私のvpsがUbuntu 14.04ボックスであることを忘れていました。

13
Rob L

jwilder/nginx-proxy プロジェクトを見てください。

Docker-genを使用したDockerコンテナー用の自動nginxプロキシ

これは、Dockerコンテナーをプロキシする最も簡単な方法です。コンテナを再起動したり、新しいコンテナを起動したりするたびにプロキシ設定ファイルを編集する必要はありません。すべて自動的に docker-gen によって実行されます。これにより、nginxのリバースプロキシ構成が生成され、コンテナーが起動および停止したときにnginxがリロードされます。

使用法

それを実行するには:

$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock \
jwilder/nginx-proxy

次に、プロキシするコンテナをenv var VIRTUAL_Host = subdomain.youdomain.comで起動します。

$ docker run -e VIRTUAL_Host=foo.bar.com  ...

Nginx-proxyを実行しているホストにfoo.bar.comを転送するようにDNSが設定されている場合、リクエストはVIRTUAL_Host env varが設定されたコンテナーにルーティングされます。

複数のポート

コンテナーが複数のポートを公開している場合、nginx-proxyはデフォルトでポート80で実行されているサービスを使用します。別のポートを指定する必要がある場合は、VIRTUAL_PORT環境変数を設定して別のポートを選択できます。コンテナーが公開するポートが1つだけで、VIRTUAL_Host env varセットがある場合、そのポートが選択されます。

32
krebernisak

リバースプロキシが必要です。 nginxとhaproxyを使用しています。どちらもうまく機能し、Dockerコンテナーから簡単に実行できます。セットアップ全体を実行する良い方法は、docker-compose(旧称fig)を使用して、外部から見えるポートのない2つのWebサイトコンテナーを作成し、たとえば、両方のWebサイトコンテナーへのリンクを持つhaproxyコンテナーを使用することです。次に、組み合わせ全体が1つのポート(80)をネットワークに公開し、haproxyコンテナーは、要求のホスト名に基づいてトラフィックを一方または他方のコンテナーに転送します。

---
proxy:
  build: proxy
  ports:
    - "80:80"
  links:
    - blog
    - work

blog:
  build: blog

work:
  build: work

次に、次のようなhaproxy構成

global
    log         127.0.0.1 local0
    maxconn     2000
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout connect         5000s
    timeout client          1200000s
    timeout server          1200000s

### HTTP frontend

frontend http_proxy
    mode http
    bind *:80
    option forwardfor except 127.0.0.0/8
    option httplog
    option http-server-close

    acl blog_url hdr_beg(Host) myblog
    use_backend blog if blog_url

    acl work_url hdr_beg(Host) mybusiness
    use_backend work if work_url

### HTTP backends

backend blog
    mode http
    server blog1 blog:80 check

backend work
    mode http
    server work1 work:80 check
2
seanmcl