utamt engineer blog

アプリケーション開発について学んだことの備忘録です。

Docker で Node.js 環境構築

設定ファイル

作業フォルダを作成し、Dockerfiledocker-compose.ymlを作成する。

Dockerfile
# hub.docker.comから公式で用意されたイメージをベースとする
FROM node:10.13-alpine
# カレントディレクトリを app に
WORKDIR /app
# デフォルトで node が起動するので sh を代わりに起動
CMD ["sh"]
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /app
# ポート3000番を開放する
EXPOSE 3000
docker-compose.yml
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 も作る。

app.js
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(3000);

サーバを起動する。

/app # node app.js
...

f:id:Utamt:20210312080940p:plain:w400

その他コマンド

コンテナの停止

$ 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