LoginSignup
7
4

More than 5 years have passed since last update.

HTTPリクエストの内容を出力するお手軽なWebサーバを作ってDocker対応させてみた

Last updated at Posted at 2018-07-06

はじめに

HTTPリクエストの内容を表示するだけ、という単機能WebサーバをExpressで作ってみました。
告知を兼ねて記事としてシェアします。

TL;DR

作ったコードは一式GitHubに上がっています。

用途

こんな時に使うと便利だと思います。

  • APIでリクエストする時に、正しくHTTPヘッダが設定できているか確認したい
  • POSTした値が正しく解釈されるか確認したい
  • 複数のコンテナアプリケーションを作って、互いに通信する構成を作る時、とりあえずのイメージを使いたい
  • ALBでECSに振り分ける構成をCloudFormationで作る時、アプリがまだできていないけど、とりあえずECRのリポジトリがほしい時

背景

用途の4つ目を叶えたかったのが、今回一番の目的でした。

PHPからインスパイア

PHPには<? phpinfo(); ?>という便利メソッドがあって、Apache + PHPで環境作った後、このphpinfo();でサーバの構成情報やHTTPリクエスト情報を確認していました。

Dockerに載せやすい形

Node.jsにはhttp-serverという便利サーバがあって、簡単にインストール&静的ファイルをサーブできます。
このツールと同じくらい簡単にインストールできて、HTTPリクエスト情報が目視しやすくって、Dockerに載せやすい形を模索していました。

便利ポイント

環境変数でポートを指定できる

環境変数でサーバがリスニングするポートを変えることができます。
Dockerはポートマッピングが重要だからこそ、イメージを作成した後にポートを変更できるのは便利です。

使い方

3つの使い方ができます。

  1. コマンドラインツールとしてインストール
  2. Dockerイメージとしてビルド
  3. npmパッケージとしてライブラリ利用

コマンドラインツールとしてインストール

npmでグローバルインストールすると、どのワーキングディレクトリからでも一発起動します。

インストール

$ npm install http-ephemeral-server -g

起動

$ http-ephemeral-server

デフォルトポートは3000になっているので、 http://localhost:3000 にアクセスすると、こんな感じの画面が表示されます。

Screenshot_2018-07-06 Screenshot.png

ポート番号を変更する

ポート番号は、環境変数PORTで指定します。

$ PORT=8000 http-ephemeral-server

今度は、 http://localhost:8000 で表示されます。

短いコマンド

http-ephemeral-serverは長すぎてタイポしそうです。
短いバージョンを用意しています。

$ hes

URLは自由

http://localhost:3000/hoge/bar/foo?The:quick:brown:fox:jumps:over:the:lazy:dog
というURLにアクセスすると、画面は同じでurlの項目が変化します。

Screenshot_2018-07-06 Screenshot(1).png

Dockerイメージとしてビルド

Dockerfileをリポジトリ内に用意しています。
GitHubからcloneしてローカルでビルドします。

ローカルにclone

$ git clone https://github.com/kulikala/http-ephemeral-server.git
$ cd http-ephemeral-server

dockerコマンドを使う

docker image buildでビルドします。
-t http-ephemeral-server:latestでビルドしたイメージにタグを付けています。

$ docker image build -t http-ephemeral-server:latest .

docker container runで起動します。

$ docker container run -d -p 3000:80 http-ephemeral-server:latest

デフォルトでは、コンテナ内ではEXPOSE 80するようにDockerfileで記述しています。
ブラウザからアクセスできるようにするには、-p 3000:80などホストポートをコンテナポートにマッピングしてあげます。
-dオプションを指定しないで起動すると、Nodeのプロセスにアタッチします。

ポートを変更してビルド

--build-argオプションでPORT変数に値を渡してあげます。

$ docker image build -t http-ephemeral-server:latest --build-arg PORT=3000 .

起動時にポート番号を変更

PORT環境変数を渡して起動すると、実行時のポート番号を変更します。
実行時に8000番ポートに変更し、 http://localhost:8000 にマッピングするには次のようにします。

$ docker container run -d -p 8000:8000 -e PORT=8000 http-ephemeral-server:latest

docker-composeコマンドを使う

便利ですよね、docker-compose
docker起動時のオプションなどはよく忘れてしまうので、起動するコンテナが1つの場合でも、docker-compose.yml書いておくことにしています。

$ docker-compose build
$ docker-compose start

リポジトリ内のdocker-compose.ymlではホストの8000番ポートにマッピングしているので、ブラウザから http://localhost:8000 にアクセスすると応答するようになります。

npmパッケージとしてライブラリ利用

http-ephemeral-serverは、Express application generator で生成したExpressアプリケーションになっています。

npmでインストール

$ npm install http-ephemeral-server --save

require()する

require('http-ephemeral-server')するとExpressのApplicationインスタンスが取得できるので、

const app = require('http-ephemeral-server')

app.listen(3000)

みたいな形で利用できます。

ぜひ、使ってみてください!

7
4
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
7
4