LoginSignup
3
3

Dockerでngrokを使いたい!

Last updated at Posted at 2024-03-09

はじめに

  • ハンズオン1イベントを開催したい。
  • 題材の都合上、サーバーを外部公開したい。
  • よって、ngrok2を使用する。できればngrokの操作は最小限にしたい。
  • もともとdockerは使用する予定

ということで、ngrokもdockerの中に入れちゃえ!ということに。

無事動いたので、備忘録として残します。

ngrok in Docker

docker-compose.yml
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はサービス名であり、なんにでも書き換えて大丈夫です。webhogeなど)

  • ngrokのイメージは公式と、そうでないものがありました。
    最初は公式でないものを使用しましたが、コンテナを再起動するとバグったため、公式のものを使用。
    公式のマニュアルはこちら
      ngrok:
          image: ngrok/ngrok:latest
    

ngrok その他

  • 認証設定

          environment:
            NGROK_AUTHTOKEN: ${NGROK_AUTH}
    

    環境変数3として、authトークン4の設定をしています。
    ${NGROK_AUTH}というのは、.envという同じ階層のファイルで定義しています。

    .env
    NGROK_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も外部公開できるようになるはずです。

  1. ハンズオン:実際にコードを書きながら学ぶこと

  2. ngrok:自分のPC上で動くサーバーに、そのPC以外からもアクセスできるようにするやつ

  3. 環境変数:プロジェクト全体で使う、変数に入れたデータ

  4. authトークン:認証用文字列。「この文字列を知ってるってことは、通していい人だ!」って判断してもらう。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3