Docker で Node.js 環境構築

設定ファイル
作業フォルダを作成し、Dockerfile
と docker-compose.yml
を作成する。
# hub.docker.comから公式で用意されたイメージをベースとする
FROM node:10.13-alpine
# カレントディレクトリを app に
WORKDIR /app
# デフォルトで node が起動するので sh を代わりに起動
CMD ["sh"]
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /app
# ポート3000番を開放する
EXPOSE 3000
version: '3'
services:
app:
build: .
volumes:
- ./app:/app
tty: true
ports:
- "8009:3000"
ビルド
$ docker-compose build
Successfully が出れば OK。
コンテナ起動
$ docker-compose up -d
起動したことは以下で確認できる。
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------
doc-node01_app_1 sh Up 0.0.0.0:8009->3000/tcp
コンテナにログイン
$ docker exec -it doc-node01_app_1 /bin/sh
または 以下の docker-compose
コマンドも使えそうだが、
ポートフォワードが上手く出来なかったので、上記の docker
コマンドを使う。
$ docker-compose run --rm app
コンテナ内で app.js を動かす
コンテナ内に express のプロジェクトを作る。
/app # npm init
...
/app # npm install express
app/app.js
も作る。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(3000);
サーバを起動する。
/app # node app.js
...
その他コマンド
コンテナの停止
$ docker stop [コンテナID]
$ docker-compose down
コンテナ ID の確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
793b28bc67f9 doc-node01_app "sh" 37 minutes ago Up 37 minutes 0.0.0.0:8009->3000/tcp doc-node01_app_1