はじめに
ということで、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も外部公開できるようになるはずです。