nginx-proxyによるマルチドメイン環境
nginx-proxyというdocker imageを使うことで,複数のコンテナによるWebサーバーを構築してみます.これによって,サーバコンテナが複数ある場合に,ドメイン名によってアクセスを振り分けることが出来ます.
このnginx-proxyのすばらしいところは,サーバコンテナの稼働状態に応じて自動で設定が変更されるところです.例えば,サーバコンテナ2が停止した場合,その時点で自動的にnginx-proxyの設定が変更されます.逆にサーバコンテナを追加したくなった場合には,引数を付けて起動するだけで追加出来ます.非常に便利ですね.
構築手順
CentOS7/docker環境が導入されていることを前提とします.
nginx-proxyコンテナの起動
以下のコマンドでimageのダウンロードと起動ができます.
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
もし,SELinuxが有効な環境であれば,–security-opt=label:type:docker_tをつけることによって,SELinux環境でも動作させることができます.
サーバコンテナの起動
サーバコンテナの環境変数VIRTUAL_HOSTを設定すればnginx-proxy経由で外部に公開することができます.カンマ区切りで複数の指定も可能です.このオプションだけでnginx-proxyが自動的に設定されるので楽です.
-e VIRTUAL_HOST=hoge.com,www.hoge.com
コマンド例は以下のようになります.各サーバコンテナや環境に合わせて設定してください.なお,-p 80:80のようなオプションは不要です.
docker run -e VIRTUAL_HOST=hoge.com -it -d server_image
まとめ
nginxによるproxy環境を構築することができました.簡単に環境構築ができる素晴らしい時代ですね.