Dockerでhttpサーバー on Node.js

f:id:utouto97:20210706233740j:plain

はじめに

今回は、↓でつくったhttpサーバーをDocker環境で構築します。

utouto97.hatenablog.com

準備としては、Dockerとdocker-composeが入っている前提で進めていきます。

$ docker -v
Docker version 20.10.5, build 55c4c88
$ docker-compose -v
docker-compose version 1.25.0, build unknown

Dockerを使ってhttpサーバー on Node.jsを構築する

まず、httpサーバーをNode.jsで建てるためのファイルapp.jsを作成します。
中身については、とりあえず以下の通りとします。
(以前の記事の初期コード)

     1  const http = require('http');
     2
     3  const hostname = '127.0.0.1';
     4  const port = 3000;
     5
     6  const server = http.createServer((req, res) => {
     7    res.statusCode = 200;
     8    res.setHeader('Content-Type', 'text/plain');
     9    res.end('Hello ' + name + '!');
    10  });
    11
    12  server.listen(port, hostname, () => {
    13    console.log(`Server running at http://${hostname}:${port}/`);
    14  });

ここで1点だけ変更を加える必要があります。
それは3行目const hostname = '127.0.0.1';の部分です。
ここをconst hostname = '0.0.0.0';に変更します。

理由は簡単で、このhttpサーバーはDockerコンテナ内で建てられます。
そして、アクセスするのはホストマシンのブラウザからです。
ということは、ホストマシンはDockerコンテナから考えると外部のネットワークということになります。
つまり、0.0.0.0を設定する必要があります。

続いて、Dockerfileを作成します。

     1  FROM node:alpine
     2
     3  WORKDIR /usr/src/app
     4
     5  COPY . .
     6
     7  CMD ["node", "app.js"]

イメージは node:alpineを使っています。
バージョンはv15.12.0でした。

ワークディレクトリを変更し、ファイルを全部コピーしています。
最後に、app.jsをnodeで実行しています。

さいごに、docker-compose.ymlを作成します。

     1  version: '3'
     2
     3  services:
     4    server:
     5      build: .
     6      ports:
     7        - "3000:3000"

主にポートの設定をしているだけです。
app.jsで3000番ポートを指定したので、ここでも3000番を指定しています。

dockerを起動します。
--buildオプションをつけることでビルドしてから起動してくれます。

$ docker-compose up --build

あとはブラウザから、http://localhost:3000/にアクセスすれば、Hello Worldが表示されます。

終わり