Dockerでhttpサーバー on Node.js
はじめに
今回は、↓でつくったhttpサーバーをDocker環境で構築します。
準備としては、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が表示されます。
終わり