Dockerのコンテナ間で通信させてリバースプロキシを作る
サーバを再構築するついでに、これまでサーバに直nginxなり各種サービスを入れていたのを、Dockerコンテナに載せてみることにした。
プライベートなページもいくつかあったり、監視ソフトの管理画面もあるので、その辺隠しておきたいので、nginxでリバースプロキシにして、BASIC認証でなんちゃって防御してるんだけど、ぐぐってもnginxでリバースプロキシを作る方法(というか、他のコンテナと通信する方法)がいまいち出てこなかったので、調べてなんとかした。
構成
こんなかんじ
- nginxがコンテナで動作していて、TCP80とホストのTCP80を対応させておく
- /grafanaにアクセスされたら、grafanaにアクセスできるようにする
- grafanaはnginxとは異なるコンテナで動作しており、grafanaはtcp3000で待ち受けている
設定
docker-composeを使っている
nginx側
- docker-compose.yml
version: '2' services: webserver: image: nginx volumes: - /path/to/www:/usr/share/nginx/html - ./default.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" networks: default: external: name: shared
- nginxの設定
(前略) location /grafana/ { proxy_pass http://grafana:3000/; } (後略)
grafana側
- docker-compose.yml
version: '2' services: grafana: image: grafana/grafana volumes: - ./grafana.ini:/etc/grafana/grafana.ini expose: - "3000" networks: default: external: name: shared
- grafanaの設定
root_url = http://example.com/grafana
設定のポイント
nginxのリバースプロキシ設定の、URLを、docker-compose.ymlで設定したサービス名にすること。
ここをlocalhostにしたり、ブリッジのIPアドレスにするとうまくいかない。
また、grafana側は、3000ポートをホストと結びつける必要はない(ホスト内部でしか通信しない)ので、portではなくてexposeでよい。
Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)
- 作者: 杉山貴章,大瀧隆太,Yugui(Yuki Sonoda),中津川篤司,前佛雅人,松原豊,米林正明,松本勇気
- 出版社/メーカー: 技術評論社
- 発売日: 2015/06/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る