2016-10-18 14 views
0

現在、私は現在、多数のパッケージからなる1つのアプリケーションであり、個々のドッカーコンテナに展開されているgolang Webアプリケーションを開発中です。私はredisインスタンスとmysqlインスタンスを別々のコンテナとしてデプロイしてリンクしています。彼らのアドレスを取得するために、私はドッカーによって設定された環境変数からそれらを引き出します。私は、他のサービスへのプロキシ要求である 'api'と呼ばれるHTTPポート(HTTPの場合は80、HTTPSの場合は443)を公開する1つのサービスを持つAPIゲートウェイパターンを実装したいと考えています。他のサービスは、ポートを公に公開するのではなく、依存しているサービスに直接リンクされていることが理想的です。apiゲートウェイのhttp経由でリンクされたドッカーコンテナ間の通信

したがって、apiはmysqlとredis以外のすべてのサービスにリンクされます。ユーザーのセッション情報を検証する必要のあるサービスは、ユーザーサービスなどとリンクされます。私の質問は、HTTPサーバーがHTTP要求をポートで受信できるようにする方法です。

答えて

2

これを行う最も簡単な方法はDocker Composeです。必要なサービスを簡単に定義することができ、Docker Composeは専用ネットワークで自動的にリンクします。 goapp,redismysqlインスタンスがあり、リバースプロキシとしてnginxを使用したいとします。次のようにあなたのdocker-compose.ymlファイルになります。

services: 
    redis: 
    image: redis 
    mysql: 
    image: mysql 
    goapp: 
    image: myrepo/goapp 
    nginx: 
    image: nginx 
    volumes: 
     - /PATH/TO/MY/CONF/api.conf:/etc/nginx/conf.d/api.conf 
    ports: 
     - "443:443" 
     - "80:80" 

利点は、あなたがその名前で他のサービスから任意のサービスを参照することができるということです。したがって、goappから、ホスト名mysqlなどのMySQLサーバにアクセスすることができます。唯一の露出ポート(つまり、ホストマシンから到達可能)は、44380nginxコンテナです。

docker-compose upでシステム全体を起動することができます。

+0

恐ろしく!ありがとう –

+0

@LoganShire私は助けることができるうれしい –

+0

私はgoappのポートを設定せずにgoappにnginx上流サーバーを設定する方法を理解しようとしています。 api.confの例を投稿できますか? (または、好ましくはnginx.confです) –

関連する問題