Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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)

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

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

tabian
画像認識技術を用いて、新しいポスター体験を提供する「ポ写」を開発している全員副業のスタートアップです! エンジニアが自由に、でも真面目に技術に向き合える環境、それは最新技術にとことんこだわれることだと思って日々Qiitaの更新頑張ってます。
https://tabian.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away