119
134

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

★若葉組のつぶやき★Advent Calendar 2015

Day 11

リバースプロキシを使ってDockerコンテナへのアクセスをポート番号でなくホスト名で分ける

Last updated at Posted at 2015-12-12

概要

Dockerで複数の開発支援サーバを立てるのがとても楽になりました。なのですが、各開発支援サーバへのアクセスをポート番号で分けていると、だんだんと混乱してきます。そこで考えるのがリバースプロキシで、__nginx__などで比較的簡単に実現できます。

リバースプロキシを簡単に実現出来る__nginx-proxy__を使ったサンプルについてメモしておきます。

やりたいこと

VirtualBoxでたてたDockerホスト上のコンテナをリバースプロキシの背後で動かすようにします。

具体的には、Jenkinsを扱う際は、

http://192.168.99.101:8080/

でしたが、

http://jenkins.dev/

でアクセスできるようにします。

Docker環境の構成

こんな感じのDocker環境が構成されているものとします。(緑の__Proxy__が今回導入するリバースプロキシ用のコンテナです。)

スクリーンショット 2015-12-13 3.11.33.png

docker-compose.ymlに__nginx_proxy__を仕込む

こんな感じで指定します。__environment__の部分に注目です。__VIRTUSL_HOST__で、Dockerコンテナ用のバーチャルホストを指定します。さらに、__VIRTUAL_PORT__で、そのDockerコンテナが公開しているポートを指定します。

docker-compose.yml
# nginx-proxy
proxy:
  image: jwilder/nginx-proxy
  ports:
    - "80:80"
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro

# jenkins container
jenkins:
  image: jenkins
  volumes_from:
    - jenkins_data
  #ports:
  #  - "8080:8080"
  environment:
    - VIRTUAL_HOST=jenkins.dev
    - VIRTUAL_PORT=8080

・・・

バーチャルホストとDockerホストのIPアドレスを対応づける

先ほどのバーチャルホストとDockerホストのIPアドレスを対応付けます。手軽に__/etc/hosts__にバーチャルホストを登録します。

VirtualBoxのホストOSでの設定は以下の通りです。

/etc/hosts
...
192.168.99.101	jenkins.dev
...

なお、ホストPC以外からアクセスさせたい場合は、アクセスしたいPCごとに、/etc/hostsを設定してやります。バーチャルホストと対応づけるのは、Dockerホストを提供するホストPCのIPアドレスです。上記のネットワーク構成であれば、こんな感じにします。

/etc/hosts
...
192.168.1.140	jenkins.dev
...

この場合は素直にDNSに登録するのが無難です。

あと、VirtualBoxのネットワーク設定でNAT側のポートフォワード設定が必要です。ホストの8080番ポートをゲスト(Dockerホスト)の80番ポートへ転送する設定です。

スクリーンショット 2015-12-13 2.24.11.png

Windowsの場合
C:¥Windows¥System32¥drivers¥etc¥hosts にあります。
__「Power Users」__に読み取り権限が必要です。(もしかすると「読み取りと実行」かも)

Dockerコンテナを再構築する

再起動でなく__再構築__です。

$ docker-compose stop jenkins

$ docker-compose rm -f jenkins

$ docker-compose up -d jenkins

nginx_proxyコンテナの設定ファイルはこんな感じになります。

$ docker ps |grep proxy
44da50d027a8        jwilder/nginx-proxy           "/app/docker-entrypoi"   15 hours ago        Up 8 minutes        0.0.0.0:80->80/tcp, 443/tcp                                                 dev_proxy_1
$ docker exec -it dev_proxy_1 bash
root@44da50d027a8:/app#
/etc/nginx/conf.d/default
...

upstream jenkins.dev {
			# dev_jenkins_1
			server 172.17.0.12:8080;
}
server {
	server_name jenkins.dev;
	listen 80 ;
	access_log /var/log/nginx/access.log vhost;
	location / {
		proxy_pass http://jenkins.dev;
	}
}

...

リバースプロキシ経由でアクセスする

ブラウザでhttp://jenkins.dev/にアクセスします。

スクリーンショット 2015-12-13 3.08.32.png

最後に

便利なものを提供してくれる方に本当に感謝です。

参考

119
134
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
119
134

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?