はじめに
ということで、ngrokもdockerの中に入れちゃえ!ということに。
無事動いたので、備忘録として残します。
ngrok in Docker
services:
apache:
image: httpd:2.4
ngrok:
image: ngrok/ngrok:latest
environment:
NGROK_AUTHTOKEN: ${NGROK_AUTH}
command: ["http", "apache:80"] # "apache"サービスはデフォルトで80番ポートにて稼働
depends_on:
- apache
ports:
- "4040:4040"
はい。これです。解説していきます。
使用した docker image
- 検証用に表示するサーバーはapacheを利用しています。imageの名前は
httpd
です。apache: image: httpd:2.4
(このコードでのapache
はサービス名であり、なんにでも書き換えて大丈夫です。web
やhoge
など)
- ngrokのイメージは公式と、そうでないものがありました。
最初は公式でないものを使用しましたが、コンテナを再起動するとバグったため、公式のものを使用。
公式のマニュアルはこちらngrok: image: ngrok/ngrok:latest
ngrok その他
-
認証設定
environment: NGROK_AUTHTOKEN: ${NGROK_AUTH}
環境変数3として、authトークン4の設定をしています。
${NGROK_AUTH}
というのは、.env
という同じ階層のファイルで定義しています。.envNGROK_AUTH=あなたのauthトークン
-
apacheとngrokをつなげる
command: ["http", "apache:80"] # "apache"サービスはデフォルトで80番ポートにて稼働
これで、ngrokが提供する公開URLへアクセスすると、apacheサービスの80番ポートへ転送されるようになりました。
(apacheサービスは80番ポートでサーバーへのアクセスを受け付けています。) -
apacheの後にngrokを実行する
apacheサービスを作った後にngrokサービスを作るようにします。depends_on: - apache
-
localhostへのアクセスをngrokへつなぐ
ports: - "4040:4040"
非常にややこしいんですが、前半の
4040
は「このPCの4040番ポート」を指し、後半の4040
は「ngrokサービスの4040番ポート」を指します。
具体的に、localhost:4040
へのアクセスが、ngrokサービスの4040番ポートへのアクセスになります。
(ngrokサービスは4040番ポートでサーバーへのアクセスを受け付けています。)
おわりに
以上、ざっくりとした説明でした。
興味ある方はやってみてください。おそらくどんなdocker containerも外部公開できるようになるはずです。