LoginSignup
2
4

More than 5 years have passed since last update.

Dockerを使って簡易的なwebサーバーを作成する

Posted at

webアプリケーションを作成していると、WEB-APIの実装はまだ完了していないけど、
とりあえず、JSONデータを返すモックサーバーのようなものが欲しいといったことが
あります。こういった時に使用できるようにDockerで簡易的なwebサーバーを構築
してみます。

ベースイメージの動作確認

webサーバーとして使えるdocker imageは色々あります。今回はh2oのサイトでも
紹介されているlkwg82/h2o-http2-serverを元にサーバーを作成しました。
まずは、lkwg82/h2o-http2-serverのイメージを起動してみます。

$ docker run -p "8080:8080" -ti lkwg82/h2o-http2-server
[INFO] raised RLIMIT_NOFILE to 1048576
h2o server (pid:5) is ready to serve requests

上記のコマンドを打つと、dockerのイメージが起動してh2oが動作していることが
わかります。

$ curl --head http://127.0.0.1:8080
HTTP/1.1 404 File Not Found
Date: Wed, 24 May 2017 12:41:04 GMT
Connection: keep-alive
Content-Length: 9
Server: h2o/2.2.2
content-type: text/plain; charset=utf-8

返ってくる結果は404ですが、少なくともサーバーが動いていることは、確認出来ました。
docker psでdockerのプロセスを確認しても、h2oが動いていることが確認できます。

$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                              NAMES
d08eed931b64        lkwg82/h2o-http2-server   "/bin/sh -c 'h2o -..."   10 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp, 8443/tcp   frosty_keller

イメージの内部の調査

webサーバーを起動出来たので、webサーバーの内部がどうなっているかを確認します。

$ docker exec -ti d08eed931b64 ash
/etc/h2o # ls
h2o.conf
/etc/h2o # cat h2o.conf
hosts:
  default:
    listen:
      port: 8080
    paths:
      /:
        file.dir: /var/www/html
        file.dirlisting: ON

access-log: /dev/stdout
error-log: /dev/stderr

コンテナの中には/etc/h2o.confがあり、file.dirが/var/www/htmlを示しています。
先ほど404エラーが出ていたので、/var/www/htmlがこのコンテナにはないことをわかります。
このイメージをベースとして/var/www/htmlのディレクトリを作成したイメージを作成すれば、
webサーバーとして動作することが想定されます。
状況の確認が出来たので、起動しているコンテナは停止しておきます。

$ docker kill d08eed931b64
d08eed931b64

イメージの修正とコンテナの起動

/var/www/htmlのディレクトリを作成するDockerfileを作成します。

From lkwg82/h2o-http2-server:latest

RUN mkdir -p /var/www/html

Dockerfileを修正したら、イメージをbuildして、docker runを実行します。

$ docker build ./ -t simple_server
$ docker run -p "8080:8080" -v {$pwd}/:/var/www/html -d simple_server
585346cc6eff75082911c33eaf6a5c7823dc9dd27a36f05a19800e5ec787bf76

-vオプションを使用することでホストのディレクトリをコンテナにマウントすることができます。
{$pwd}の部分にホストのディレクトリの絶対パスを入れます。例えば/tmpを指定していた
としてファイルを作成して、curlで参照すると、

$ echo "hello world" > /tmp/hello_world
$ curl http://127.0.0.1:8080/hello_world
hello world

上記のような結果となり、webサーバーとして機能していることが確認出来ました。

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