Node
nodejs
docker
nodemon
server-reload
DockerDay 18

Docker で nodemon を使って、サーバー再起動を自動化する

方法としては、nodemon を使って、volumes でコンテナー内のファイルを編集できるようにして、index.js の変更を監視してもらうようにした。

docker-compose.yml
version: '2'
services:
  IMAGE_NAME:
    build: .
    restart: on-failure
    environment:
      - NODE_ENV
    tty: true
    stdin_open: true
    depends_on:
    volumes:
      - ./package.json:/usr/src/app/package.json
      - ./index.js:/usr/src/app/index.js

package.json の bin を設定することで、コマンドを設定できるので、global インストールさせずに nodemon コマンドを叩いている。

Dockerfile ファイルの最後の行で定義した yarn start コマンドが nodemon index.js にあたるようになるので、dockerを docker-compose up で立ち上げたときに、監視されて自動で再起動される。

FROM node:8
MAINTAINER Ryosuke Miyamoto <miyamoto@ndinc.jp>

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/

RUN yarn install

COPY . /usr/src/app/

EXPOSE 3000

CMD ["yarn", "start"]

package.json
{
  "name": "bot",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": ""
  },
  "scripts": {
    "start": "nodemon index.js",
  },
  "keywords": [
  ],
  "author": "yahsan2",
  "license": "MIT",
  "bin": {
    "nodemon": "node_modules/nodemon/bin/nodemon.js"
  },
  "dependencies": {
    "nodemon": "^1.13.3",
  },
  "devDependencies": {
  }
}


※ 上記ファイルのコードは、必要な部分を抜粋なので、動作確認していない。