ngrokでDockerのコンテナをSSLで外部公開する

ローカルで起動してるDockerのコンテナをhttpsで配信するのって結構面倒ですよね。一度証明書を発行する設定を書いてしまえば、簡単ですが、私みたいにDockerを頻繁に使わない層にとっては、SSL化することは容易ではありません。

今回は半テスト的にngrokを使っていきます。例えば、Service Workerのちょっとしたテストをしたい場合、https環境が必要になります。そんな時見つけたのが、ngrokです。ngrocが簡単そうだったので、使って見ました。ngrokの本来の趣旨とは違うかもしれませんが、紹介していきます。

ngrokのインストール

公式サイトでアカウント作成後、ダッシュボードにインストール方法が書かれていますので、それに従って、インストールしていきます。

公式サイト

https://ngrok.com/

インストールが完了後、とりあえずわからないことはhelpコマンドを叩いてみてください。

$ ./ngrok help

Dockerで簡易的なコンテナを立てる

私が作ったDockerのレシピの中の、node-simpleを使います。下記のリンクにアクセスして、Gitでローカルに落としてきてください。
https://github.com/kamimura-dev/docker-recipe

Gitで落とせたら対象フォルダに移動します。

$ cd node-simple

そして、Dockerfileをビルドしていきます。

$ docker build -t /nodeapp .

ビルドしたイメージを走らせます。

$ docker run -p 8080:8080 -d /nodeapp

コンテナが立ち上がるので、docker psでローカルとコンテナの8080番がリンクされていることを確認します。
f:id:kamimura-dev:20181108214943p:plain

ngrokで起動

それでは早速使っていきましょう。まずは自分のIPを調べます。Macならifconfigというコマンドを打てばわかるはずです。

そして、下記のyour_ipのところに自分のIPを入れます。すると、ngrokのポートが開き、ngrockのネットワークから配信することができます。

$ ./ngrok http your_ip:8080

f:id:kamimura-dev:20181108215002p:plain
そしてngrok側で発行されるURLに飛ぶと、コンテナで起動したアプリと同じ画面になる。SSL化はngrock側で自動的にやってくれるので、httpsでもアクセス
サーバーを止めたいときは、ctrl + cで簡単に止めることができます。

最後に

ngrokを使ってDockerコンテナをSSLで簡単に外部公開できました。私の用途はDocker側にあるフロントエンドアプリケーションのService Wockerテストですが、他にも利用用途がありそうです。しかし、セキュリティリスクも考えなくてはいけません。ngrok側からローカルにパケットが転送されるわけですから、リスクもあります。個人的には自宅サーバーなどの長期的な運用はするべきではありません。リスクを考えて、適切な場面で使いましょう。