dockerコンテナごとにドメイン運用でしたい
dockerでコンテナごとにドメインを設定して運用したい
ドメインを割り振る為にサーバをもう一つ借りたりするのは苦しいのです。と言う事でコンテナにドメインを割り当てて運用しようと考えました。
私はさくらのVPSを使用しています。ホストOSへのドメインの設定が済んでいない方はこちらが参考になります。
参考:
・Dockerコンテナへのアクセスをドメインごとに変更する
・Nginxのリーバスプロキシ化
・Dockerのjwilder/nginx-proxyとは
今回コンテナにドメインを割り振ろうと...
docker run ...-e VIRTUAL_HOST=sample.com -p 8080:80 centos:7...
とコマンドを打ってコンテナを作成しましたがコンテナへのアクセスは...
http://sample.com:8080
という感じになってしまいます...
ポートを指定するのは嫌ですね。
解決方法を調べていたら見つかりました。
nginx-proxyの実行
まず nginx-proxy を起動します。これはDockerイメージで配布されています。
$ docker run -d -p 80:80 --name nginx -v /tmp/nginx:/etc/nginx/conf.d -t nginx
ホストの80番ポートへのアクセスをそのまま受け取る仕組みになっています。
docker-genのインストール
次に docker-gen をインストールします。これはDockerのコンテナ設定を生成するライブラリです。
mkdir -p /tmp/templates && cd /tmp/templates
curl -o nginx.tmpl https://raw.githubusercontent.com/jwilder/docker-gen/master/templates/nginx.tmpl
docker run -d --name nginx-gen --volumes-from nginx \
-v /var/run/docker.sock:/tmp/docker.sock \
-v /tmp/templates:/etc/docker-gen/templates \
-t jwilder/docker-gen:0.3.4 -notify-sighup nginx -watch \
--only-published /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
docker-gen はDockerのソケットファイルを監視しており、起動するタイミングや逆にkillされるタイミングで設定を変更します。
コンテナを立ち上げる
コンテナを立ち上げます。
docker run -itd --privileged --name test -e VIRTUAL_HOST=sample.com -p 8080:80 centos:7 /sbin/init
これで「sample.com」とドメインだけ叩けばコンテナ内のページにアクセスできるようになります。
(※コンテナ内のWEBサーバを立ち上げてから)
エラー
プロキシ用のコンテナがポート80を使用するので下記のエラーが出る場合があります。
Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.
下記のコマンドで使用しているプロセスを確認してみて下さい。
lsof -i -P | grep "LISTEN"
apacheやnginxであれば下記のコマンドで停止するかポートを変更します。
sudo systemctl stop nginx
ディスカッション
コメント一覧
まだ、コメントがありません