nginx-proxy 導入¶
created at 2019-08-21 16:18+0900
nginx-proxyとはDockerコンテナへリバースプロキシするためのnginx設定(/etc/nginx/conf.d/default.conf)を自動で書き換えてくれちゃう神コンテナ。
jwilder/nginx-proxy
ブラウザからのアクセスはnginx-proxyを介して、こういうふうにプロキシされちゃうイメージ。httpプロトコル以外のアクセスはシカト(そもそもlistenしてない)。
See also ネットワーク図.
以下、nginx-proxyの導入手順についての覚書。
docker-composeファイル作成¶
次のようにdocker-compose.ymlファイルを作成する。
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
environment:
- DEFAULT_HOST=www.r-square.net
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt/live/r-square.net/fullchain.pem:/etc/nginx/certs/r-square.net.crt:ro
- /etc/letsencrypt/live/r-square.net/privkey.pem:/etc/nginx/certs/r-square.net.key:ro
- /var/docker.d/nginx-proxy/vhost.d:/etc/nginx/vhost.d
- /var/docker.d/nginx-proxy/conf.d/my_proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro
logging:
driver: journald
networks:
- common_link
restart: always
networks:
common_link:
external: true
/var/run/docker.sock:/tmp/docker.sock:ro はDocker神とnginx-proxy神がお話するために必要なものらしい。
/etc/localtime:/etc/localtime:ro はコンテナ内のタイムゾーンをホスト側へ合わせるためのもの。
ワイルドカードSSL証明書の場合、{ドメイン}.crt,{ドメイン}.keyで指定する。
サブドメインごとのSSL証明書の場合、サブドメインごとに指定が必要(sub1.domain.crt,sub2.domain.crt,,,}。
/etc/nginx/vhost.d はバーチャルホストごとに個別の設定を追加したい時に設定ファイルを置く場所(ファイル名はsub1.domain_locationという形式)。
/etc/nginx/conf.d/my_proxy.conf はnginx-proxyの設定を追加する場合に指定する。
loggingドライバーはお好みで。
docker network 作成¶
このネットワークに入ったコンテナへプロキシしてくださいと頼むためのdocker networkを作成する。
# 事前確認
docker network ls
# ネットワーク作成
docker network create --driver bridge common_link
# 事後確認
docker network ls
まとまらないまとめ¶
この後、サービス(のまとまり)ごとのdocker-compose.ymlファイルを作成し docker-compose up すれば、nginx-proxy神がよきにはからってくださる。ありがたや。
グローバルドメイン一個しかなくても、これでサブドメイン使いたい放題だー\(^o^)/
このネットワークへ参加させる個々のコンテナについては以下参照のこと。